{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "gsn45i8AWUxw"
   },
   "source": [
    "Deep Learning Models -- A collection of various deep learning architectures, models, and tips for TensorFlow and PyTorch in Jupyter Notebooks.\n",
    "- Author: Sebastian Raschka\n",
    "- GitHub Repository: https://github.com/rasbt/deeplearning-models"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 119
    },
    "colab_type": "code",
    "id": "jcO_pGrwWUxx",
    "outputId": "001a0bdd-7224-459f-a80e-9d2336f9edb1"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Sebastian Raschka \n",
      "\n",
      "CPython 3.7.1\n",
      "IPython 7.2.0\n",
      "\n",
      "torch 1.0.0\n"
     ]
    }
   ],
   "source": [
    "%load_ext watermark\n",
    "%watermark -a 'Sebastian Raschka' -v -p torch"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "yaPAGojpWUx2"
   },
   "source": [
    "- Runs on CPU or GPU (if available)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "lYFsqMPGWUx3"
   },
   "source": [
    "# Model Zoo -- Cyclical Learning Rate in PyTorch"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "Fa9mT_urXvMf"
   },
   "source": [
    "This notebook will go over the following topics in the order listed below:\n",
    "\n",
    "1. Briefly explain the concept behind the cyclical learning rate\n",
    "2. Use the \"LR range test\" to choose a good base and max learning rate for the cyclical leraning rate\n",
    "3. Train a simple convolutional neural net on CIFAR-10 using the cyclical learning rate"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "HqJXinN5WUx3"
   },
   "source": [
    "## Cyclical Learning Rate Concept"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "8Q6XUX6GSYD-"
   },
   "source": [
    "In his paper [1], Leslie N. Smith introduced the concept of cyclical learning rates, that is, learning rates that periodically alternative between a user-specified minimum and maximum learning rate. \n",
    "\n",
    "Varying the learning rate between between specified bounds, as implemented by Smith, is cheaper to compute than the nowadays popular approach using adaptive learning rates. Note that adaptive learning rate can also be combined with the concept of cyclical learning rates.\n",
    "\n",
    "The idea behind cyclical learning rates is that while increasing the learning rate can be harmful short term it can be beneficial in the long run. Concretely, the three methods introduced by Smith (and implemented in this notebook) are\n",
    "\n",
    "- `triangular`: The base approach, varying between a lower and an upper bound, as illustrated in the figure below\n",
    "- `triangular2`: Same as triangular, but learning rate difference is cut in half at the end of each cycle. This means the learning rate difference drops after each cycle\n",
    "-- `exp_range`: The learning rate varies between the minimum and maximum boundaries and each boundary value declines by an exponential factor of $gamma^{iteration}$\n",
    "\n",
    "\n",
    "{insert figure}\n",
    "\n",
    "\n",
    "### References\n",
    "\n",
    "\n",
    "- [1] Smith, Leslie N. “[Cyclical learning rates for training neural networks](https://ieeexplore.ieee.org/abstract/document/7926641/).” Applications of Computer Vision (WACV), 2017 IEEE Winter Conference on. IEEE, 2017."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "wx0idSn5SWG1"
   },
   "source": [
    "Following the description in the paper, the different cyclical learning rates are very simple to implement, as shown below:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "WmHAbUMlWUx4"
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "\n",
    "\n",
    "def cyclical_learning_rate(batch_step,\n",
    "                           step_size,\n",
    "                           base_lr=0.001,\n",
    "                           max_lr=0.006,\n",
    "                           mode='triangular',\n",
    "                           gamma=0.999995):\n",
    "\n",
    "    cycle = np.floor(1 + batch_step / (2. * step_size))\n",
    "    x = np.abs(batch_step / float(step_size) - 2 * cycle + 1)\n",
    "\n",
    "    lr_delta = (max_lr - base_lr) * np.maximum(0, (1 - x))\n",
    "    \n",
    "    if mode == 'triangular':\n",
    "        pass\n",
    "    elif mode == 'triangular2':\n",
    "        lr_delta = lr_delta * 1 / (2. ** (cycle - 1))\n",
    "    elif mode == 'exp_range':\n",
    "        lr_delta = lr_delta * (gamma**(batch_step))\n",
    "    else:\n",
    "        raise ValueError('mode must be \"triangular\", \"triangular2\", or \"exp_range\"')\n",
    "        \n",
    "    lr = base_lr + lr_delta\n",
    "    \n",
    "    return lr"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "DwyuJm46YXQf"
   },
   "source": [
    "To ensure that the learning rate works as intended, let us plot the learning rate variation for a dry run. Note that `batch_step` is a variable that tracks the total number of times a model has been updated. For instance, if we run the training loop over 5 epochs (5 passes over the training set), where each epoch is split into 100 batches, then we have a `batch_step` count of 5 * 100 = 500 at the end of the training. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "CQx-HDcyYWlu"
   },
   "outputs": [],
   "source": [
    "num_epochs = 50\n",
    "num_train = 50000\n",
    "batch_size = 100\n",
    "iter_per_ep = num_train // batch_size"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "87UblsShY7Uy"
   },
   "source": [
    "**Triangular**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 269
    },
    "colab_type": "code",
    "id": "qIHyChx8Y6Lu",
    "outputId": "ab9a6ae8-db6e-4846-c48c-a7ce99443df8"
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "\n",
    "batch_step = -1\n",
    "collect_lr = []\n",
    "for e in range(num_epochs):\n",
    "    for i in range(iter_per_ep):\n",
    "        batch_step += 1\n",
    "        cur_lr = cyclical_learning_rate(batch_step=batch_step,\n",
    "                                        step_size=iter_per_ep*5)\n",
    "        \n",
    "        collect_lr.append(cur_lr)\n",
    "        \n",
    "plt.scatter(range(len(collect_lr)), collect_lr)\n",
    "plt.ylim([0.0, 0.01])\n",
    "plt.xlim([0, num_epochs*iter_per_ep + 5000])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "YkKd-HdtbWqv"
   },
   "source": [
    "As we can see above, with a batchsize of 100 and for a training set of 50,000 training example, we have 50,000=500 iterations per epoch. With a cycle length of 5*iterations_per_epoch=25,000, the learning rate reaches the base_lr every 5 epochs, which is equal to 25,000 batch updates. The stepsize is defined as cycle/2, i.e., 25,000/2 = 12,500 batch updates."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "bMErqRevY-hO"
   },
   "source": [
    "**Triangular2**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "pFBm9DnTcmiM"
   },
   "source": [
    "The `triangular2` learning rate is similar to the `triangular` learning rate but cuts the max. learning rate in halve after each cycle."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 269
    },
    "colab_type": "code",
    "id": "pATJZ3BbY9sZ",
    "outputId": "192f3447-7072-445d-d8dd-d48d5c19c177"
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "collect_lr = []\n",
    "batch_step = -1\n",
    "for e in range(num_epochs):\n",
    "    for i in range(iter_per_ep):\n",
    "        batch_step += 1\n",
    "        cur_lr = cyclical_learning_rate(batch_step=batch_step,\n",
    "                                        step_size=iter_per_ep*4,\n",
    "                                        mode='triangular2')\n",
    "        \n",
    "        collect_lr.append(cur_lr)\n",
    "        \n",
    "plt.scatter(range(len(collect_lr)), collect_lr)\n",
    "plt.ylim([0.0, 0.01])\n",
    "plt.xlim([0, num_epochs*iter_per_ep + 5000])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "ogc0gqPTZAjz"
   },
   "source": [
    "**Exp_range**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "470maAxLc6UC"
   },
   "source": [
    "The `exp_range` option adds an additional hyperparameter, `gamma` to decay the learning rate exponentially."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 269
    },
    "colab_type": "code",
    "id": "SBm5Q7x9Zt54",
    "outputId": "8f5f1662-ace9-43e8-f97b-4bed6fecb590"
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "collect_lr = []\n",
    "batch_step = -1\n",
    "for e in range(num_epochs):\n",
    "    for i in range(iter_per_ep):\n",
    "        batch_step += 1\n",
    "        cur_lr = cyclical_learning_rate(batch_step=batch_step,\n",
    "                                        step_size=iter_per_ep*4,\n",
    "                                        mode='exp_range',\n",
    "                                        gamma=0.99998)\n",
    "        \n",
    "        collect_lr.append(cur_lr)\n",
    "        \n",
    "plt.scatter(range(len(collect_lr)), collect_lr)\n",
    "plt.ylim([0.0, 0.01])\n",
    "plt.xlim([0, num_epochs*iter_per_ep + 5000])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "8HhNsfbmWUx7"
   },
   "source": [
    "## Torch Imports"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "ZfG-3PemWUx7"
   },
   "outputs": [],
   "source": [
    "import time\n",
    "import torch\n",
    "import torch.nn.functional as F\n",
    "from torchvision import datasets\n",
    "from torchvision import transforms\n",
    "from torch.utils.data.sampler import SubsetRandomSampler\n",
    "from torch.utils.data import DataLoader\n",
    "\n",
    "\n",
    "if torch.cuda.is_available():\n",
    "    torch.backends.cudnn.deterministic = True"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "7NYCdJSHWUx-"
   },
   "source": [
    "## Settings and Dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 119
    },
    "colab_type": "code",
    "id": "r0x1fTW0WUx_",
    "outputId": "7bf96884-0d96-4ac4-c77d-583bd0b6b651"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Files already downloaded and verified\n",
      "Image batch dimensions: torch.Size([128, 3, 32, 32])\n",
      "Image label dimensions: torch.Size([128])\n",
      "Number of training examples: 49000\n",
      "Number of validation instances: 1000\n",
      "Number of test instances: 10000\n"
     ]
    }
   ],
   "source": [
    "##########################\n",
    "### SETTINGS\n",
    "##########################\n",
    "\n",
    "# Device\n",
    "device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")\n",
    "\n",
    "# Hyperparameters\n",
    "random_seed = 1\n",
    "batch_size = 128\n",
    "\n",
    "# Architecture\n",
    "num_classes = 10\n",
    "\n",
    "\n",
    "##########################\n",
    "### CIFAR-10 DATASET\n",
    "##########################\n",
    "\n",
    "# Note transforms.ToTensor() scales input images\n",
    "# to 0-1 range\n",
    "\n",
    "## Create a validation dataset\n",
    "np.random.seed(random_seed)\n",
    "idx = np.arange(50000) # the size of CIFAR10-train\n",
    "np.random.shuffle(idx)\n",
    "val_idx, train_idx = idx[:1000], idx[1000:]\n",
    "train_sampler = SubsetRandomSampler(train_idx)\n",
    "val_sampler = SubsetRandomSampler(val_idx)\n",
    "\n",
    "\n",
    "train_dataset = datasets.CIFAR10(root='data', \n",
    "                                 train=True, \n",
    "                                 transform=transforms.ToTensor(),\n",
    "                                 download=True)\n",
    "\n",
    "test_dataset = datasets.CIFAR10(root='data', \n",
    "                                train=False, \n",
    "                                transform=transforms.ToTensor())\n",
    "\n",
    "\n",
    "train_loader = DataLoader(dataset=train_dataset, \n",
    "                          batch_size=batch_size, \n",
    "                          # shuffle=True, # Subsetsampler already shuffles\n",
    "                          sampler=train_sampler)\n",
    "\n",
    "val_loader = DataLoader(dataset=train_dataset, \n",
    "                        batch_size=batch_size, \n",
    "                        # shuffle=True,\n",
    "                        sampler=val_sampler)\n",
    "\n",
    "test_loader = DataLoader(dataset=test_dataset, \n",
    "                         batch_size=batch_size, \n",
    "                         shuffle=False)\n",
    "\n",
    "# Checking the dataset\n",
    "for images, labels in train_loader:  \n",
    "    print('Image batch dimensions:', images.shape)\n",
    "    print('Image label dimensions:', labels.shape)\n",
    "    break\n",
    "    \n",
    "cnt = 0\n",
    "for images, labels in train_loader: \n",
    "    cnt += images.shape[0]\n",
    "print('Number of training examples:', cnt)\n",
    "\n",
    "cnt = 0\n",
    "for images, labels in val_loader: \n",
    "    cnt += images.shape[0]\n",
    "print('Number of validation instances:', cnt)\n",
    "\n",
    "cnt = 0\n",
    "for images, labels in test_loader: \n",
    "    cnt += images.shape[0]\n",
    "print('Number of test instances:', cnt)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "agDsuvseWUyC"
   },
   "source": [
    "## Model"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "uhrX9-e0afuK"
   },
   "source": [
    "Note that this is a very simple convolutional network in this notebook, which is not geared to reach best performance on CIFAR-10 but rather to test the implementation of the cyclical learning rate concept."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "luAg0-ncWUyD"
   },
   "outputs": [],
   "source": [
    "##########################\n",
    "### MODEL\n",
    "##########################\n",
    "\n",
    "\n",
    "class ConvNet(torch.nn.Module):\n",
    "\n",
    "    def __init__(self, num_classes):\n",
    "        super(ConvNet, self).__init__()\n",
    "        \n",
    "        # calculate same padding:\n",
    "        # (w - k + 2*p)/s + 1 = o\n",
    "        # => p = (s(o-1) - w + k)/2\n",
    "        \n",
    "        # 32x32x3 => 32x32x6\n",
    "        self.conv_1 = torch.nn.Conv2d(in_channels=3,\n",
    "                                      out_channels=6,\n",
    "                                      kernel_size=(3, 3),\n",
    "                                      stride=(1, 1),\n",
    "                                      padding=1) # (1(32-1) - 32 + 3) / 2) = 1\n",
    "        # 32x32x4 => 16x16x6\n",
    "        self.pool_1 = torch.nn.MaxPool2d(kernel_size=(2, 2),\n",
    "                                         stride=(2, 2),\n",
    "                                         padding=0) # (2(16-1) - 32 + 2) = 0                                       \n",
    "        \n",
    "        \n",
    "        # 16x16x6 => 16x16x12\n",
    "        self.conv_2 = torch.nn.Conv2d(in_channels=6,\n",
    "                                      out_channels=12,\n",
    "                                      kernel_size=(3, 3),\n",
    "                                      stride=(1, 1),\n",
    "                                      padding=1) # (1(16-1) - 16 + 3) / 2 = 1                 \n",
    "        # 16x16x12 => 8x8x12                             \n",
    "        self.pool_2 = torch.nn.MaxPool2d(kernel_size=(2, 2),\n",
    "                                         stride=(2, 2),\n",
    "                                         padding=0) # (2(8-1) - 16 + 2) = 0\n",
    "        \n",
    "        \n",
    "        # 8x8x12 => 8x8x18\n",
    "        self.conv_3 = torch.nn.Conv2d(in_channels=12,\n",
    "                                      out_channels=18,\n",
    "                                      kernel_size=(3, 3),\n",
    "                                      stride=(1, 1),\n",
    "                                      padding=1) # (1(8-1) - 8 + 3) / 2 = 1                 \n",
    "        # 8x8x18 => 4x4x18                             \n",
    "        self.pool_3 = torch.nn.MaxPool2d(kernel_size=(2, 2),\n",
    "                                         stride=(2, 2),\n",
    "                                         padding=0) # (2(4-1) - 8 + 2) = 0\n",
    "        \n",
    "        \n",
    "        # 4x4x18 => 4x4x24\n",
    "        self.conv_4 = torch.nn.Conv2d(in_channels=18,\n",
    "                                      out_channels=24,\n",
    "                                      kernel_size=(3, 3),\n",
    "                                      stride=(1, 1),\n",
    "                                      padding=1)                 \n",
    "        # 4x4x24 => 2x2x24                             \n",
    "        self.pool_4 = torch.nn.MaxPool2d(kernel_size=(2, 2),\n",
    "                                         stride=(2, 2),\n",
    "                                         padding=0)\n",
    "        \n",
    "        \n",
    "        # 2x2x24 => 2x2x30\n",
    "        self.conv_5 = torch.nn.Conv2d(in_channels=24,\n",
    "                                      out_channels=30,\n",
    "                                      kernel_size=(3, 3),\n",
    "                                      stride=(1, 1),\n",
    "                                      padding=1)                 \n",
    "        # 2x2x30 => 1x1x30                             \n",
    "        self.pool_5 = torch.nn.MaxPool2d(kernel_size=(2, 2),\n",
    "                                         stride=(2, 2),\n",
    "                                         padding=0)\n",
    "        \n",
    "        self.linear_1 = torch.nn.Linear(1*1*30, num_classes)\n",
    "\n",
    "        \n",
    "    def forward(self, x):\n",
    "        out = self.conv_1(x)\n",
    "        out = F.relu(out)\n",
    "        out = self.pool_1(out)\n",
    "\n",
    "        out = self.conv_2(out)\n",
    "        out = F.relu(out)\n",
    "        out = self.pool_2(out)\n",
    "        \n",
    "        out = self.conv_3(out)\n",
    "        out = F.relu(out)\n",
    "        out = self.pool_3(out)\n",
    "        \n",
    "        out = self.conv_4(out)\n",
    "        out = F.relu(out)\n",
    "        out = self.pool_4(out)\n",
    "        \n",
    "        out = self.conv_5(out)\n",
    "        out = F.relu(out)\n",
    "        out = self.pool_5(out)\n",
    "        \n",
    "        logits = self.linear_1(out.view(-1, 1*1*30))\n",
    "        probas = F.softmax(logits, dim=1)\n",
    "        return logits, probas"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "YwLP-0qkWUyF"
   },
   "source": [
    "## LR Range Test"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "Z_PvKZmYZ12N"
   },
   "source": [
    "The LR range test is a simple heuristic that is also described in Smith's paper. Essentially, it's a quick-and-dirty approach to find good values for the `base_lr` and `max_lr` (hyperparameters of the cyclical learning rate).\n",
    "\n",
    "It works as follows:\n",
    "\n",
    "We run the training for 5-10 epochs and increase the learning rate linearly up to an upper bound. We select the cut-off where the (train or validation) accuracy starts improving as the base_lr for the cyclical learning rate. The max_lr for the cyclical learning rate is determined in a similar manner, by choosing the cut-off value where the accuracy improvements stop, decrease, or widely fluctuate.\n",
    "\n",
    "Note that we can use the `cyclical_learning_rate` function to compute the learning rates for the increasing interval by setting `step_size=num_epochs*iter_per_ep`:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 269
    },
    "colab_type": "code",
    "id": "Giqvby2abkA8",
    "outputId": "28a54819-ca46-4f90-e3aa-058a01017778"
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "num_epochs = 10\n",
    "\n",
    "batch_step = -1\n",
    "collect_lr = []\n",
    "for e in range(num_epochs):\n",
    "    for i in range(iter_per_ep):\n",
    "        batch_step += 1\n",
    "        cur_lr = cyclical_learning_rate(batch_step=batch_step,\n",
    "                                        step_size=num_epochs*iter_per_ep)\n",
    "        \n",
    "        collect_lr.append(cur_lr)\n",
    "        \n",
    "plt.scatter(range(len(collect_lr)), collect_lr)\n",
    "plt.ylim([0.0, 0.01])\n",
    "plt.xlim([0, num_epochs*iter_per_ep + 5000])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "VUEUn70QWUyG"
   },
   "source": [
    "**Utility Functions**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "cQ46iEStWUyG"
   },
   "outputs": [],
   "source": [
    "def compute_accuracy(model, data_loader):\n",
    "    correct_pred, num_examples = 0, 0\n",
    "    for features, targets in data_loader:\n",
    "        features = features.to(device)\n",
    "        targets = targets.to(device)\n",
    "        logits, probas = model(features)\n",
    "        _, predicted_labels = torch.max(probas, 1)\n",
    "        num_examples += targets.size(0)\n",
    "        correct_pred += (predicted_labels == targets).sum()\n",
    "    return correct_pred.float()/num_examples * 100"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "QL7DF29vWUyK"
   },
   "source": [
    "**Train Model/Run LR Range Test**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 357
    },
    "colab_type": "code",
    "id": "WI-NY9u4WUyL",
    "outputId": "f323a1d5-0c7b-442d-8b7c-131c821b1cab"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Total batch #     0/3830   Curr. Batch Cost: 2.31266\n",
      "Total batch #   200/3830   Curr. Batch Cost: 2.30711\n",
      "Total batch #   400/3830   Curr. Batch Cost: 2.30392\n",
      "Total batch #   600/3830   Curr. Batch Cost: 2.30356\n",
      "Total batch #   800/3830   Curr. Batch Cost: 2.30203\n",
      "Total batch #  1000/3830   Curr. Batch Cost: 2.30223\n",
      "Total batch #  1200/3830   Curr. Batch Cost: 2.30101\n",
      "Total batch #  1400/3830   Curr. Batch Cost: 2.30159\n",
      "Total batch #  1600/3830   Curr. Batch Cost: 2.25974\n",
      "Total batch #  1800/3830   Curr. Batch Cost: 2.02467\n",
      "Total batch #  2000/3830   Curr. Batch Cost: 2.01952\n",
      "Total batch #  2200/3830   Curr. Batch Cost: 1.90831\n",
      "Total batch #  2400/3830   Curr. Batch Cost: 1.56817\n",
      "Total batch #  2600/3830   Curr. Batch Cost: 1.71451\n",
      "Total batch #  2800/3830   Curr. Batch Cost: 2.13523\n",
      "Total batch #  3000/3830   Curr. Batch Cost: 1.62590\n",
      "Total batch #  3200/3830   Curr. Batch Cost: 1.42501\n",
      "Total batch #  3400/3830   Curr. Batch Cost: 1.62436\n",
      "Total batch #  3600/3830   Curr. Batch Cost: 1.55984\n",
      "Total batch #  3800/3830   Curr. Batch Cost: 1.48068\n"
     ]
    }
   ],
   "source": [
    "#################################\n",
    "### Setting for this run\n",
    "#################################\n",
    "\n",
    "num_epochs = 10\n",
    "iter_per_ep = len(train_loader)\n",
    "base_lr = 0.01\n",
    "max_lr = 0.2\n",
    "\n",
    "#################################\n",
    "### Init Model\n",
    "#################################\n",
    "\n",
    "torch.manual_seed(random_seed)\n",
    "model = ConvNet(num_classes=num_classes)\n",
    "model = model.to(device)\n",
    "\n",
    "##########################\n",
    "### COST AND OPTIMIZER\n",
    "##########################\n",
    "\n",
    "cost_fn = torch.nn.CrossEntropyLoss()  \n",
    "optimizer = torch.optim.SGD(model.parameters(), lr=base_lr)  \n",
    "\n",
    "########################################################################\n",
    "# Collect the data to be evaluated via the LR Range Test\n",
    "collect = {'lr': [], 'cost': [], 'train_batch_acc': [], 'val_acc': []}\n",
    "########################################################################\n",
    "\n",
    "\n",
    "batch_step = -1\n",
    "cur_lr = base_lr\n",
    "\n",
    "start_time = time.time()\n",
    "for epoch in range(num_epochs):\n",
    "    for batch_idx, (features, targets) in enumerate(train_loader):\n",
    "        \n",
    "        batch_step += 1\n",
    "        features = features.to(device)\n",
    "        targets = targets.to(device)\n",
    "\n",
    "        ### FORWARD AND BACK PROP\n",
    "        logits, probas = model(features)\n",
    "        cost = cost_fn(logits, targets)\n",
    "        optimizer.zero_grad()\n",
    "\n",
    "        cost.backward()\n",
    "\n",
    "        ### UPDATE MODEL PARAMETERS\n",
    "        optimizer.step()\n",
    "        \n",
    "        #############################################\n",
    "        # Logging\n",
    "        if not batch_step % 200:\n",
    "            print('Total batch # %5d/%d' % (batch_step, \n",
    "                                            iter_per_ep*num_epochs), \n",
    "                  end='')\n",
    "            print('   Curr. Batch Cost: %.5f' % cost)     \n",
    "\n",
    "        #############################################\n",
    "        # Collect stats    \n",
    "        model = model.eval()\n",
    "        train_acc = compute_accuracy(model, [[features, targets]])\n",
    "        val_acc = compute_accuracy(model, val_loader)\n",
    "        collect['lr'].append(cur_lr)\n",
    "        collect['train_batch_acc'].append(train_acc)\n",
    "        collect['val_acc'].append(val_acc)\n",
    "        collect['cost'].append(cost)\n",
    "        model = model.train()\n",
    "        #############################################\n",
    "        # update learning rate\n",
    "        cur_lr = cyclical_learning_rate(batch_step=batch_step,\n",
    "                                        step_size=num_epochs*iter_per_ep,\n",
    "                                        base_lr=base_lr,\n",
    "                                        max_lr=max_lr)\n",
    "        for g in optimizer.param_groups:\n",
    "            g['lr'] = cur_lr\n",
    "        ############################################\n",
    "\n",
    "    print('Time elapsed: %.2f min' % ((time.time() - start_time)/60))\n",
    "    \n",
    "print('Total Training Time: %.2f min' % ((time.time() - start_time)/60))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 541
    },
    "colab_type": "code",
    "id": "_hOJ7z1-WUyN",
    "outputId": "148987b0-093b-4f22-a3b4-acd4cb9bddee"
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAEKCAYAAAAfGVI8AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzsnXd4VMXawH+zJQUIEHoTgoIoHSmKYsWGqHgFFStWrhU7Iuq1otiu5dMroiKoKGDBQlM6UqUF6dUAgQABAiFA2u58f5zte86WZEuymd/z5Mk5c6a8e7KZd+aded8RUkoUCoVCUXUxxVsAhUKhUMQXpQgUCoWiiqMUgUKhUFRxlCJQKBSKKo5SBAqFQlHFUYpAoVAoqjhKESgUCkUVRykChUKhqOIoRaBQKBRVHEu8BQiFevXqyYyMjHiLoVAoFJWKlStXHpRS1g+Wr1IogoyMDFasWBFvMRQKhaJSIYTYGUo+ZRpSKBSKKo5SBAqFQlHFUYpAoVAoqjiVYo1Aj5KSErKzsyksLIy3KIoykpKSQrNmzbBarfEWRaGo0lRaRZCdnU1aWhoZGRkIIeItjiJMpJQcOnSI7OxsWrZsGW9xFIoqTaU1DRUWFlK3bl2lBCopQgjq1q2rZnQKRQWg0ioCQCmBSo76+ykUFYNKrQgUCoUiVLbnFrBk+6Gwy63fe5TVu/IiKovNLpm0Yjc2u2Te5gPsPnwiovWHS6VdI1AoFIpw6P3ufACyRvYNq1zfDxeWqVwgvl6SxUu/beBksY0Xf11PssXE5tf6RKz+cFEzgjJy5MgR/ve//4Vd7qqrruLIkSNhl7vooovC8q7OzMxk2rRpQfPVqFEjbFkUCkX5OHyiBIC8E8UAFJXa4ymOUgRlxUgR2Gy2gOWmTZtG7dq1oyWWi1AVgUKhiA7vz9pC9xGzwirzxrSNXPDW3ChJZExCmIZe/m09G/bmR7TOtk1q8uI17QyfDxs2jO3bt9O5c2esVis1atSgcePGZGZmsmHDBq677jp2795NYWEhjz76KIMHDwbccZMKCgro06cPvXr1YvHixTRt2pRffvmF1NRUwza/+eYbhgwZQn5+PmPGjKFHjx789ddfPPbYY5w8eZLU1FS+/PJLWrZsyX/+8x9OnjzJwoULefbZZ+nbty+PPPIIK1asQAjBiy++SP/+/QF47rnnmDJlCqmpqfzyyy80bNhQt/3ffvuN1157jeLiYurWrcv48eNp2LAhBQUFunXPmDGD4cOHY7PZqFevHrNnzy7HX0ShqFy8P2tr2GU+XbAjCpIEJyEUQTwYOXIk69atIzMzk3nz5tG3b1/WrVvn2hM/ZswY6tSpw8mTJ+nevTv9+/enbt26XnVs3bqV7777js8++4wbb7yRH3/8kdtuu82wzePHj7N48WIWLFjA3Xffzbp16zjjjDNYsGABFouFWbNmMXz4cH788UdeeeUVVqxYwUcffQTAM888Q61atVi7di0AeXl5rjrPOeccRowYwdChQ/nss894/vnnddvv1asXS5cuRQjB559/zltvvcW7777Lq6++6ld3bm4u9913HwsWLKBly5YcPny4fC9coVBEjYRQBIFG7rGiR48eXo5RH374IZMnTwZg9+7dbN261U8RtGzZks6dOwPQtWtXsrKyArZx8803A3DBBReQn5/PkSNHOHbsGIMGDWLr1q0IISgpKdEtO2vWLCZMmOC6T09PByApKYmrr77aJcPMmTMN28/Ozuamm24iJyeH4uJi1+fVq/u3337jggsucOWpU6dOwM+mUFQppIy3BF6oNYIIUb16ddf1vHnzmDVrFkuWLGHNmjV06dJF13EqOTnZdW02myktLQ3Yhu++eyEEL7zwAhdffDHr1q3jt99+M3TQklLq7tu3Wq2u9GAyPPLIIzz88MOsXbuWTz/91NWWXt1G7SkUiopHVBWBEKK2EOIHIcQmIcRGIURPIUQdIcRMIcRWx+/0aMoQLdLS0jh27Jjus6NHj5Kenk61atXYtGkTS5cujUibEydOBGDhwoXUqlWLWrVqcfToUZo2bQrA2LFjDeW7/PLLXWYicJuGwsGzrXHjxgWsu2fPnsyfP59//vkHQJmGFGHz9u+buP/rlfEWIyyem7yWYT/+rfvseFEpGcOmkjFsKh/O2RawnkvenYeM4awh2jOCD4AZUsozgE7ARmAYMFtK2RqY7bivdNStW5fzzjuP9u3b8/TTT3s9u/LKKyktLaVjx4688MILnHPOORFpMz09nXPPPZf777+fL774AoChQ4fy7LPPct5553ntWLr44ovZsGEDnTt3ZuLEiTz//PPk5eXRvn17OnXqxNy54e9MeOmll7jhhhs4//zzqVevnitdr+769eszevRo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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(collect['lr'], collect['train_batch_acc'], label='train_batch_acc')\n",
    "plt.plot(collect['lr'], collect['val_acc'], label='val_acc')\n",
    "plt.xlabel('Learning Rate')\n",
    "plt.ylabel('Accuracy')\n",
    "plt.legend()\n",
    "plt.show()\n",
    "\n",
    "\n",
    "plt.plot(collect['lr'], collect['cost'])\n",
    "plt.xlabel('Learning Rate')\n",
    "plt.ylabel('Current Batch Cost')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "d07DrlrjOHzC"
   },
   "source": [
    "Looking at the graphs above, in particular the validation accuracy, it's not immediately obvious to find the 2 points:\n",
    "\n",
    "1. Where the accuracy starts increasing\n",
    "2. Where the accuracy starts dropping or ceases to improve\n",
    "\n",
    "However, point 1) may be at 0.08-0.09, and point 2) may be at 0.175 or even 0.2 (or even beyond that, if we would keep increasing the learning rate).\n",
    "\n",
    "\n",
    "Also note that this heuristic is less \"clean\" as starting the epoch from scratch with each incremental learning rate change, which adds addtional noise to the interpretation (including questions like \"by how much did the cost drop/accuracy improve just because of going downhill on the cost surface and the gradients becoming smaller?\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "KcZ2vv8foEcP"
   },
   "source": [
    "## Train with Cyclical Learning Rate (`triangular`)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "FvnNfSIfPiw4"
   },
   "source": [
    "Below, the triangular (default) cyclical learning rate training procedure is run with a `base_lr=0.09` and `max_lr=0.175`. Based on the LR Range Tests graphs above, a `max_lr` >= 0.2 may even be reasonable. However, in practice (based on my experience and some trial runs with these settings), such large learning rates would increase  convergence problems using a vanilla SGD optimizer (as it is done here). "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 2567
    },
    "colab_type": "code",
    "id": "W_MyHO0HoIz8",
    "outputId": "ace8f950-c37b-49a7-98ff-7849185d6892"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch   1  |  Train/Valid Acc: 10.12/11.50\n",
      "Epoch   2  |  Train/Valid Acc: 11.56/11.80\n",
      "Epoch   3  |  Train/Valid Acc: 25.08/23.20\n",
      "Epoch   4  |  Train/Valid Acc: 29.49/30.20\n",
      "Epoch   5  |  Train/Valid Acc: 39.37/38.70\n",
      "Epoch   6  |  Train/Valid Acc: 41.30/39.30\n",
      "Epoch   7  |  Train/Valid Acc: 39.99/36.40\n",
      "Epoch   8  |  Train/Valid Acc: 43.76/41.30\n",
      "Epoch   9  |  Train/Valid Acc: 49.54/47.30\n",
      "Epoch  10  |  Train/Valid Acc: 50.19/48.70\n",
      "Epoch  11  |  Train/Valid Acc: 52.60/48.90\n",
      "Epoch  12  |  Train/Valid Acc: 53.14/52.00\n",
      "Epoch  13  |  Train/Valid Acc: 55.03/52.20\n",
      "Epoch  14  |  Train/Valid Acc: 52.50/51.50\n",
      "Epoch  15  |  Train/Valid Acc: 56.78/54.20\n",
      "Epoch  16  |  Train/Valid Acc: 57.11/54.60\n",
      "Epoch  17  |  Train/Valid Acc: 53.47/51.40\n",
      "Epoch  18  |  Train/Valid Acc: 58.84/54.80\n",
      "Epoch  19  |  Train/Valid Acc: 60.68/57.80\n",
      "Epoch  20  |  Train/Valid Acc: 59.67/55.20\n",
      "Epoch  21  |  Train/Valid Acc: 60.42/55.40\n",
      "Epoch  22  |  Train/Valid Acc: 62.05/57.10\n",
      "Epoch  23  |  Train/Valid Acc: 58.89/53.80\n",
      "Epoch  24  |  Train/Valid Acc: 61.83/58.90\n",
      "Epoch  25  |  Train/Valid Acc: 64.20/57.50\n",
      "Epoch  26  |  Train/Valid Acc: 62.74/56.80\n",
      "Epoch  27  |  Train/Valid Acc: 60.05/56.20\n",
      "Epoch  28  |  Train/Valid Acc: 61.31/56.20\n",
      "Epoch  29  |  Train/Valid Acc: 65.26/59.30\n",
      "Epoch  30  |  Train/Valid Acc: 64.57/59.40\n",
      "Epoch  31  |  Train/Valid Acc: 59.70/55.20\n",
      "Epoch  32  |  Train/Valid Acc: 60.00/57.10\n",
      "Epoch  33  |  Train/Valid Acc: 64.72/59.20\n",
      "Epoch  34  |  Train/Valid Acc: 60.15/54.80\n",
      "Epoch  35  |  Train/Valid Acc: 60.73/55.60\n",
      "Epoch  36  |  Train/Valid Acc: 64.78/59.90\n",
      "Epoch  37  |  Train/Valid Acc: 64.26/60.10\n",
      "Epoch  38  |  Train/Valid Acc: 65.21/59.50\n",
      "Epoch  39  |  Train/Valid Acc: 64.77/56.70\n",
      "Epoch  40  |  Train/Valid Acc: 63.09/55.20\n",
      "Epoch  41  |  Train/Valid Acc: 66.14/60.90\n",
      "Epoch  42  |  Train/Valid Acc: 67.17/62.50\n",
      "Epoch  43  |  Train/Valid Acc: 60.02/54.30\n",
      "Epoch  44  |  Train/Valid Acc: 64.91/58.80\n",
      "Epoch  45  |  Train/Valid Acc: 67.85/60.30\n",
      "Epoch  46  |  Train/Valid Acc: 64.30/58.10\n",
      "Epoch  47  |  Train/Valid Acc: 64.16/58.30\n",
      "Epoch  48  |  Train/Valid Acc: 68.18/62.10\n",
      "Epoch  49  |  Train/Valid Acc: 62.60/58.40\n",
      "Epoch  50  |  Train/Valid Acc: 66.92/60.50\n",
      "Epoch  51  |  Train/Valid Acc: 63.54/57.20\n",
      "Epoch  52  |  Train/Valid Acc: 68.29/61.20\n",
      "Epoch  53  |  Train/Valid Acc: 67.00/61.30\n",
      "Epoch  54  |  Train/Valid Acc: 66.01/60.70\n",
      "Epoch  55  |  Train/Valid Acc: 66.48/61.50\n",
      "Epoch  56  |  Train/Valid Acc: 61.47/56.10\n",
      "Epoch  57  |  Train/Valid Acc: 66.07/60.30\n",
      "Epoch  58  |  Train/Valid Acc: 67.73/59.40\n",
      "Epoch  59  |  Train/Valid Acc: 62.46/58.90\n",
      "Epoch  60  |  Train/Valid Acc: 66.94/61.40\n",
      "Epoch  61  |  Train/Valid Acc: 69.32/64.10\n",
      "Epoch  62  |  Train/Valid Acc: 57.43/54.50\n",
      "Epoch  63  |  Train/Valid Acc: 67.81/60.60\n",
      "Epoch  64  |  Train/Valid Acc: 64.76/59.30\n",
      "Epoch  65  |  Train/Valid Acc: 69.20/62.60\n",
      "Epoch  66  |  Train/Valid Acc: 66.62/61.40\n",
      "Epoch  67  |  Train/Valid Acc: 64.40/60.00\n",
      "Epoch  68  |  Train/Valid Acc: 66.40/62.20\n",
      "Epoch  69  |  Train/Valid Acc: 68.49/62.80\n",
      "Epoch  70  |  Train/Valid Acc: 66.81/61.30\n",
      "Epoch  71  |  Train/Valid Acc: 67.85/62.10\n",
      "Epoch  72  |  Train/Valid Acc: 68.71/62.10\n",
      "Epoch  73  |  Train/Valid Acc: 66.94/61.90\n",
      "Epoch  74  |  Train/Valid Acc: 69.00/62.30\n",
      "Epoch  75  |  Train/Valid Acc: 65.22/61.90\n",
      "Epoch  76  |  Train/Valid Acc: 65.86/60.70\n",
      "Epoch  77  |  Train/Valid Acc: 70.45/62.80\n",
      "Epoch  78  |  Train/Valid Acc: 63.32/57.10\n",
      "Epoch  79  |  Train/Valid Acc: 68.13/59.80\n",
      "Epoch  80  |  Train/Valid Acc: 69.84/64.40\n",
      "Epoch  81  |  Train/Valid Acc: 69.26/63.70\n",
      "Epoch  82  |  Train/Valid Acc: 66.01/61.60\n",
      "Epoch  83  |  Train/Valid Acc: 70.93/65.30\n",
      "Epoch  84  |  Train/Valid Acc: 69.66/62.10\n",
      "Epoch  85  |  Train/Valid Acc: 65.53/61.50\n",
      "Epoch  86  |  Train/Valid Acc: 67.92/60.20\n",
      "Epoch  87  |  Train/Valid Acc: 67.67/63.10\n",
      "Epoch  88  |  Train/Valid Acc: 64.33/59.40\n",
      "Epoch  89  |  Train/Valid Acc: 66.37/58.60\n",
      "Epoch  90  |  Train/Valid Acc: 63.32/56.20\n",
      "Epoch  91  |  Train/Valid Acc: 67.35/61.30\n",
      "Epoch  92  |  Train/Valid Acc: 69.12/62.00\n",
      "Epoch  93  |  Train/Valid Acc: 69.93/62.90\n",
      "Epoch  94  |  Train/Valid Acc: 66.52/60.70\n",
      "Epoch  95  |  Train/Valid Acc: 69.41/61.80\n",
      "Epoch  96  |  Train/Valid Acc: 67.85/62.50\n",
      "Epoch  97  |  Train/Valid Acc: 70.32/63.60\n",
      "Epoch  98  |  Train/Valid Acc: 69.32/62.90\n",
      "Epoch  99  |  Train/Valid Acc: 68.90/60.30\n",
      "Epoch 100  |  Train/Valid Acc: 69.61/61.80\n",
      "Epoch 101  |  Train/Valid Acc: 67.63/62.10\n",
      "Epoch 102  |  Train/Valid Acc: 68.18/61.60\n",
      "Epoch 103  |  Train/Valid Acc: 71.05/62.40\n",
      "Epoch 104  |  Train/Valid Acc: 71.27/63.30\n",
      "Epoch 105  |  Train/Valid Acc: 67.66/62.30\n",
      "Epoch 106  |  Train/Valid Acc: 70.37/61.60\n",
      "Epoch 107  |  Train/Valid Acc: 65.84/63.10\n",
      "Epoch 108  |  Train/Valid Acc: 72.44/63.80\n",
      "Epoch 109  |  Train/Valid Acc: 71.44/62.50\n",
      "Epoch 110  |  Train/Valid Acc: 69.01/61.90\n",
      "Epoch 111  |  Train/Valid Acc: 69.38/60.80\n",
      "Epoch 112  |  Train/Valid Acc: 70.99/65.00\n",
      "Epoch 113  |  Train/Valid Acc: 67.42/59.40\n",
      "Epoch 114  |  Train/Valid Acc: 68.88/61.40\n",
      "Epoch 115  |  Train/Valid Acc: 70.59/61.90\n",
      "Epoch 116  |  Train/Valid Acc: 64.71/58.50\n",
      "Epoch 117  |  Train/Valid Acc: 67.19/61.20\n",
      "Epoch 118  |  Train/Valid Acc: 68.88/61.70\n",
      "Epoch 119  |  Train/Valid Acc: 69.34/62.70\n",
      "Epoch 120  |  Train/Valid Acc: 66.37/62.10\n",
      "Epoch 121  |  Train/Valid Acc: 66.52/59.90\n",
      "Epoch 122  |  Train/Valid Acc: 69.42/61.30\n",
      "Epoch 123  |  Train/Valid Acc: 51.75/47.70\n",
      "Epoch 124  |  Train/Valid Acc: 70.67/62.90\n",
      "Epoch 125  |  Train/Valid Acc: 71.86/63.10\n",
      "Epoch 126  |  Train/Valid Acc: 71.21/63.20\n",
      "Epoch 127  |  Train/Valid Acc: 72.21/63.60\n",
      "Epoch 128  |  Train/Valid Acc: 69.04/62.30\n",
      "Epoch 129  |  Train/Valid Acc: 67.66/59.60\n",
      "Epoch 130  |  Train/Valid Acc: 69.09/61.50\n",
      "Epoch 131  |  Train/Valid Acc: 64.01/57.00\n",
      "Epoch 132  |  Train/Valid Acc: 69.79/61.50\n",
      "Epoch 133  |  Train/Valid Acc: 66.73/60.80\n",
      "Epoch 134  |  Train/Valid Acc: 65.47/57.60\n",
      "Epoch 135  |  Train/Valid Acc: 68.09/59.90\n",
      "Epoch 136  |  Train/Valid Acc: 64.38/58.50\n",
      "Epoch 137  |  Train/Valid Acc: 70.52/61.70\n",
      "Epoch 138  |  Train/Valid Acc: 68.28/61.60\n",
      "Epoch 139  |  Train/Valid Acc: 67.66/60.60\n",
      "Epoch 140  |  Train/Valid Acc: 70.20/62.20\n",
      "Epoch 141  |  Train/Valid Acc: 71.66/63.10\n",
      "Epoch 142  |  Train/Valid Acc: 64.78/57.40\n",
      "Epoch 143  |  Train/Valid Acc: 63.49/56.70\n",
      "Epoch 144  |  Train/Valid Acc: 72.68/63.30\n",
      "Epoch 145  |  Train/Valid Acc: 70.93/62.50\n",
      "Epoch 146  |  Train/Valid Acc: 70.51/61.90\n",
      "Epoch 147  |  Train/Valid Acc: 72.00/61.60\n",
      "Epoch 148  |  Train/Valid Acc: 69.59/60.70\n",
      "Epoch 149  |  Train/Valid Acc: 71.24/60.70\n",
      "Epoch 150  |  Train/Valid Acc: 69.91/59.60\n"
     ]
    }
   ],
   "source": [
    "#################################\n",
    "### Setting for this run\n",
    "#################################\n",
    "\n",
    "num_epochs = 150\n",
    "iter_per_ep = len(train_loader.sampler.indices) // train_loader.batch_size\n",
    "base_lr = 0.09\n",
    "max_lr = 0.175\n",
    "\n",
    "#################################\n",
    "### Init Model\n",
    "#################################\n",
    "\n",
    "torch.manual_seed(random_seed)\n",
    "model = ConvNet(num_classes=num_classes)\n",
    "model = model.to(device)\n",
    "\n",
    "##########################\n",
    "### COST AND OPTIMIZER\n",
    "##########################\n",
    "\n",
    "cost_fn = torch.nn.CrossEntropyLoss()  \n",
    "optimizer = torch.optim.SGD(model.parameters(), lr=base_lr)  \n",
    "\n",
    "########################################################################\n",
    "# Collect the data to be evaluated via the LR Range Test\n",
    "collect = {'epoch': [], 'cost': [], 'train_acc': [], 'val_acc': []}\n",
    "########################################################################\n",
    "\n",
    "start_time = time.time()\n",
    "for epoch in range(num_epochs):\n",
    "    epoch_avg_cost = 0.\n",
    "    model = model.train()\n",
    "    for batch_idx, (features, targets) in enumerate(train_loader):\n",
    "        \n",
    "        features = features.to(device)\n",
    "        targets = targets.to(device)\n",
    "\n",
    "        ### FORWARD AND BACK PROP\n",
    "        logits, probas = model(features)\n",
    "        cost = cost_fn(logits, targets)\n",
    "        optimizer.zero_grad()\n",
    "\n",
    "        cost.backward()\n",
    "\n",
    "        ### UPDATE MODEL PARAMETERS\n",
    "        optimizer.step()\n",
    "\n",
    "        epoch_avg_cost += cost\n",
    "        \n",
    "        #############################################\n",
    "        # Logging\n",
    "        if not batch_step % 600:\n",
    "            print('Batch %5d/%d' % (batch_step, iter_per_ep*num_epochs),\n",
    "                                    end='')\n",
    "            print('   Cost: %.5f' % cost)     \n",
    "\n",
    "\n",
    "    #############################################\n",
    "    # Collect stats    \n",
    "    model = model.eval()\n",
    "    train_acc = compute_accuracy(model, train_loader)\n",
    "    val_acc = compute_accuracy(model, val_loader)\n",
    "    epoch_avg_cost /= batch_idx+1\n",
    "    collect['epoch'].append(epoch+1)\n",
    "    collect['val_acc'].append(val_acc)\n",
    "    collect['train_acc'].append(train_acc)\n",
    "    collect['cost'].append(epoch_avg_cost / iter_per_ep)\n",
    "    \n",
    "    ################################################\n",
    "    # Logging\n",
    "    print('Epoch %3d' % (epoch+1), end='')\n",
    "    print('  |  Train/Valid Acc: %.2f/%.2f' % (train_acc, val_acc))\n",
    "    \n",
    "    \n",
    "    #############################################\n",
    "    # update learning rate\n",
    "    base_lr = cyclical_learning_rate(batch_step=batch_step,\n",
    "                                     step_size=num_epochs*iter_per_ep,\n",
    "                                     base_lr=base_lr,\n",
    "                                     max_lr=max_lr)\n",
    "    for g in optimizer.param_groups:\n",
    "        g['lr'] = base_lr\n",
    "    ############################################\n",
    "    \n",
    "\n",
    "    print('Time elapsed: %.2f min' % ((time.time() - start_time)/60))\n",
    "    \n",
    "print('Total Training Time: %.2f min' % ((time.time() - start_time)/60))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 541
    },
    "colab_type": "code",
    "id": "P_3X9h9CrQwD",
    "outputId": "011badf6-a190-4880-8377-eaa5ded3f199"
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(collect['epoch'], collect['train_acc'], label='train_acc')\n",
    "plt.plot(collect['epoch'], collect['val_acc'], label='val_acc')\n",
    "plt.xlabel('Epoch')\n",
    "plt.ylabel('Accuracy')\n",
    "plt.legend()\n",
    "plt.show()\n",
    "\n",
    "\n",
    "plt.plot(collect['epoch'], collect['cost'])\n",
    "plt.xlabel('Epoch')\n",
    "plt.ylabel('Avg. Cost Per Epoch')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 34
    },
    "colab_type": "code",
    "id": "-28cbD9hKp56",
    "outputId": "93d97e13-00a0-4f1f-b98b-66ca33f276f2"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Test accuracy: 61.45%\n"
     ]
    }
   ],
   "source": [
    "print('Test accuracy: %.2f%%' % (compute_accuracy(model, test_loader)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "kTtRXkn5daq7"
   },
   "source": [
    "## Train with Cyclical Learning Rate (`triangular2`)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 3091
    },
    "colab_type": "code",
    "id": "zS-lrQx3QYAH",
    "outputId": "3640920f-82ac-4489-b52e-15616bb442fd"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch   1  |  Train/Valid Acc: 10.10/11.50\n",
      "Epoch   2  |  Train/Valid Acc: 11.65/11.70\n",
      "Epoch   3  |  Train/Valid Acc: 25.36/23.20\n",
      "Epoch   4  |  Train/Valid Acc: 23.71/25.20\n",
      "Epoch   5  |  Train/Valid Acc: 39.76/39.30\n",
      "Epoch   6  |  Train/Valid Acc: 41.19/38.80\n",
      "Epoch   7  |  Train/Valid Acc: 40.50/37.70\n",
      "Epoch   8  |  Train/Valid Acc: 44.18/41.50\n",
      "Epoch   9  |  Train/Valid Acc: 49.93/47.00\n",
      "Epoch  10  |  Train/Valid Acc: 51.51/49.00\n",
      "Epoch  11  |  Train/Valid Acc: 52.48/49.50\n",
      "Epoch  12  |  Train/Valid Acc: 51.53/50.80\n",
      "Epoch  13  |  Train/Valid Acc: 54.98/52.80\n",
      "Epoch  14  |  Train/Valid Acc: 47.98/46.50\n",
      "Epoch  15  |  Train/Valid Acc: 57.34/54.80\n",
      "Epoch  16  |  Train/Valid Acc: 57.44/54.20\n",
      "Epoch  17  |  Train/Valid Acc: 55.66/53.80\n",
      "Epoch  18  |  Train/Valid Acc: 59.47/55.10\n",
      "Epoch  19  |  Train/Valid Acc: 58.14/55.20\n",
      "Epoch  20  |  Train/Valid Acc: 58.70/55.30\n",
      "Epoch  21  |  Train/Valid Acc: 58.28/54.00\n",
      "Epoch  22  |  Train/Valid Acc: 61.68/58.00\n",
      "Epoch  23  |  Train/Valid Acc: 59.49/56.80\n",
      "Epoch  24  |  Train/Valid Acc: 61.95/56.70\n",
      "Epoch  25  |  Train/Valid Acc: 58.73/54.00\n",
      "Epoch  26  |  Train/Valid Acc: 58.40/53.50\n",
      "Epoch  27  |  Train/Valid Acc: 59.80/56.90\n",
      "Epoch  28  |  Train/Valid Acc: 61.06/56.60\n",
      "Epoch  29  |  Train/Valid Acc: 59.48/55.10\n",
      "Epoch  30  |  Train/Valid Acc: 63.96/59.20\n",
      "Epoch  31  |  Train/Valid Acc: 61.43/56.90\n",
      "Epoch  32  |  Train/Valid Acc: 64.08/59.30\n",
      "Epoch  33  |  Train/Valid Acc: 64.98/59.70\n",
      "Epoch  34  |  Train/Valid Acc: 56.01/51.10\n",
      "Epoch  35  |  Train/Valid Acc: 64.41/59.80\n",
      "Epoch  36  |  Train/Valid Acc: 64.44/60.50\n",
      "Epoch  37  |  Train/Valid Acc: 64.06/59.20\n",
      "Epoch  38  |  Train/Valid Acc: 63.14/58.60\n",
      "Epoch  39  |  Train/Valid Acc: 63.49/61.10\n",
      "Epoch  40  |  Train/Valid Acc: 65.99/60.90\n",
      "Epoch  41  |  Train/Valid Acc: 64.38/57.70\n",
      "Epoch  42  |  Train/Valid Acc: 63.68/59.10\n",
      "Epoch  43  |  Train/Valid Acc: 63.98/58.10\n",
      "Epoch  44  |  Train/Valid Acc: 65.07/59.50\n",
      "Epoch  45  |  Train/Valid Acc: 64.54/60.70\n",
      "Epoch  46  |  Train/Valid Acc: 66.89/62.10\n",
      "Epoch  47  |  Train/Valid Acc: 63.51/59.10\n",
      "Epoch  48  |  Train/Valid Acc: 66.54/61.20\n",
      "Epoch  49  |  Train/Valid Acc: 66.38/60.70\n",
      "Epoch  50  |  Train/Valid Acc: 66.54/60.20\n",
      "Epoch  51  |  Train/Valid Acc: 65.31/58.40\n",
      "Epoch  52  |  Train/Valid Acc: 64.59/60.60\n",
      "Epoch  53  |  Train/Valid Acc: 66.46/60.70\n",
      "Epoch  54  |  Train/Valid Acc: 61.76/57.50\n",
      "Epoch  55  |  Train/Valid Acc: 67.43/62.70\n",
      "Epoch  56  |  Train/Valid Acc: 66.12/61.10\n",
      "Epoch  57  |  Train/Valid Acc: 66.77/61.10\n",
      "Epoch  58  |  Train/Valid Acc: 67.22/60.30\n",
      "Epoch  59  |  Train/Valid Acc: 66.94/62.30\n",
      "Epoch  60  |  Train/Valid Acc: 68.32/61.60\n",
      "Epoch  61  |  Train/Valid Acc: 67.54/62.10\n",
      "Epoch  62  |  Train/Valid Acc: 65.06/61.10\n",
      "Epoch  63  |  Train/Valid Acc: 63.50/59.20\n",
      "Epoch  64  |  Train/Valid Acc: 66.59/60.80\n",
      "Epoch  65  |  Train/Valid Acc: 69.35/60.90\n",
      "Epoch  66  |  Train/Valid Acc: 67.44/62.80\n",
      "Epoch  67  |  Train/Valid Acc: 67.28/62.50\n",
      "Epoch  68  |  Train/Valid Acc: 68.13/62.00\n",
      "Epoch  69  |  Train/Valid Acc: 65.02/60.00\n",
      "Epoch  70  |  Train/Valid Acc: 68.35/63.00\n",
      "Epoch  71  |  Train/Valid Acc: 61.92/57.70\n",
      "Epoch  72  |  Train/Valid Acc: 68.02/62.10\n",
      "Epoch  73  |  Train/Valid Acc: 67.62/61.50\n",
      "Epoch  74  |  Train/Valid Acc: 68.39/61.50\n",
      "Epoch  75  |  Train/Valid Acc: 66.11/60.70\n",
      "Epoch  76  |  Train/Valid Acc: 60.31/56.90\n",
      "Epoch  77  |  Train/Valid Acc: 67.06/61.60\n",
      "Epoch  78  |  Train/Valid Acc: 66.69/61.00\n",
      "Epoch  79  |  Train/Valid Acc: 68.88/62.70\n",
      "Epoch  80  |  Train/Valid Acc: 53.01/48.80\n",
      "Epoch  81  |  Train/Valid Acc: 70.58/63.00\n",
      "Epoch  82  |  Train/Valid Acc: 66.57/60.00\n",
      "Epoch  83  |  Train/Valid Acc: 62.87/57.30\n",
      "Epoch  84  |  Train/Valid Acc: 69.49/61.50\n",
      "Epoch  85  |  Train/Valid Acc: 66.03/60.40\n",
      "Epoch  86  |  Train/Valid Acc: 68.34/63.10\n",
      "Epoch  87  |  Train/Valid Acc: 69.02/60.90\n",
      "Epoch  88  |  Train/Valid Acc: 65.63/60.30\n",
      "Epoch  89  |  Train/Valid Acc: 62.16/56.80\n",
      "Epoch  90  |  Train/Valid Acc: 58.92/56.50\n",
      "Epoch  91  |  Train/Valid Acc: 70.52/63.90\n",
      "Epoch  92  |  Train/Valid Acc: 69.29/62.90\n",
      "Epoch  93  |  Train/Valid Acc: 69.67/62.70\n",
      "Epoch  94  |  Train/Valid Acc: 69.38/62.00\n",
      "Epoch  95  |  Train/Valid Acc: 68.55/62.00\n",
      "Epoch  96  |  Train/Valid Acc: 69.87/63.00\n",
      "Epoch  97  |  Train/Valid Acc: 67.04/60.20\n",
      "Epoch  98  |  Train/Valid Acc: 64.95/60.00\n",
      "Epoch  99  |  Train/Valid Acc: 67.18/61.30\n",
      "Epoch 100  |  Train/Valid Acc: 69.53/60.40\n",
      "Epoch 101  |  Train/Valid Acc: 68.25/62.00\n",
      "Epoch 102  |  Train/Valid Acc: 66.14/60.40\n",
      "Epoch 103  |  Train/Valid Acc: 70.77/63.10\n",
      "Epoch 104  |  Train/Valid Acc: 66.72/58.20\n",
      "Epoch 105  |  Train/Valid Acc: 67.28/61.10\n",
      "Epoch 106  |  Train/Valid Acc: 69.26/61.80\n",
      "Epoch 107  |  Train/Valid Acc: 70.49/63.00\n",
      "Epoch 108  |  Train/Valid Acc: 68.44/61.50\n",
      "Epoch 109  |  Train/Valid Acc: 69.62/62.20\n",
      "Epoch 110  |  Train/Valid Acc: 65.51/57.40\n",
      "Epoch 111  |  Train/Valid Acc: 67.62/60.60\n",
      "Epoch 112  |  Train/Valid Acc: 68.98/62.60\n",
      "Epoch 113  |  Train/Valid Acc: 67.35/61.70\n",
      "Epoch 114  |  Train/Valid Acc: 63.91/57.20\n",
      "Epoch 115  |  Train/Valid Acc: 69.48/59.50\n",
      "Epoch 116  |  Train/Valid Acc: 67.54/60.90\n",
      "Epoch 117  |  Train/Valid Acc: 64.29/58.20\n",
      "Epoch 118  |  Train/Valid Acc: 68.95/61.50\n",
      "Epoch 119  |  Train/Valid Acc: 69.82/60.40\n",
      "Epoch 120  |  Train/Valid Acc: 68.28/60.70\n",
      "Epoch 121  |  Train/Valid Acc: 67.40/58.80\n",
      "Epoch 122  |  Train/Valid Acc: 68.32/61.40\n",
      "Epoch 123  |  Train/Valid Acc: 71.35/61.70\n",
      "Epoch 124  |  Train/Valid Acc: 69.96/60.80\n",
      "Epoch 125  |  Train/Valid Acc: 69.93/61.90\n",
      "Epoch 126  |  Train/Valid Acc: 70.48/61.20\n",
      "Epoch 127  |  Train/Valid Acc: 65.93/58.40\n",
      "Epoch 128  |  Train/Valid Acc: 66.86/61.10\n",
      "Epoch 129  |  Train/Valid Acc: 69.40/60.50\n",
      "Epoch 130  |  Train/Valid Acc: 71.33/61.00\n",
      "Epoch 131  |  Train/Valid Acc: 70.79/61.50\n",
      "Epoch 132  |  Train/Valid Acc: 67.92/60.80\n",
      "Epoch 133  |  Train/Valid Acc: 68.64/61.50\n",
      "Epoch 134  |  Train/Valid Acc: 65.79/59.10\n",
      "Epoch 135  |  Train/Valid Acc: 69.58/62.90\n",
      "Epoch 136  |  Train/Valid Acc: 69.36/62.00\n",
      "Epoch 137  |  Train/Valid Acc: 65.36/61.50\n",
      "Epoch 138  |  Train/Valid Acc: 67.90/60.50\n",
      "Epoch 139  |  Train/Valid Acc: 66.31/58.10\n",
      "Epoch 140  |  Train/Valid Acc: 71.86/63.60\n",
      "Epoch 141  |  Train/Valid Acc: 63.20/58.50\n",
      "Epoch 142  |  Train/Valid Acc: 68.61/59.60\n",
      "Epoch 143  |  Train/Valid Acc: 68.63/60.70\n",
      "Epoch 144  |  Train/Valid Acc: 69.86/61.70\n",
      "Epoch 145  |  Train/Valid Acc: 65.65/60.60\n",
      "Epoch 146  |  Train/Valid Acc: 69.74/61.10\n",
      "Epoch 147  |  Train/Valid Acc: 68.24/59.10\n",
      "Epoch 148  |  Train/Valid Acc: 66.41/58.70\n",
      "Epoch 149  |  Train/Valid Acc: 63.01/57.50\n",
      "Epoch 150  |  Train/Valid Acc: 70.22/62.70\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAEKCAYAAAAfGVI8AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzsnXecXFX5/99n2pbZ3neTLdnd9N4LhARCC02KBURExB8igthFv/K1fhXBghVFEZGACgjSSwgxhJDe+ybZbO9ttk4/vz/OvVN2Z0vK7qbc9+uV12Rm7tw5Mzv3POf5POUIKSUGBgYGBucvptEegIGBgYHB6GIYAgMDA4PzHMMQGBgYGJznGIbAwMDA4DzHMAQGBgYG5zmGITAwMDA4zzEMgYGBgcF5jmEIDAwMDM5zDENgYGBgcJ5jGe0BDIW0tDRZUFAw2sMwMDAwOKvYvn17k5QyfbDjzgpDUFBQwLZt20Z7GAYGBgZnFUKI8qEcZ0hDBgYGBuc5hiEwMDAwOM8xDIGBgYHBeY5hCAwMDAzOcwxDYGBgYHCeYxgCAwMDg/McwxAYGBgYnOcYhsDAwMDgNLCjopW9VY7RHsZJYRgCAwMDg9PA/768j5+8cXC0h3FSGIbAwMDgrGX1gXpue2Izbq//hF7X0uXmrr9v44MjTadtLNWtPbR0uU/b+UYSwxAYGBictby6u4b1R5p4ZXfNCb3u5V3VvHOgntuf3MIzm4fUhWFAetw+Wrs9tHYbhiAMIcREIcSukH/tQogvCyFShBCrhRBHtNvk4RqDgcGZgtfn5+39dUgpT9s5GzqcdLm8p+18vdle3srin66hudPV7zHD+f5DYXdVGwCPv3+sz3fr9fXvJby5t46idDtLx6fxPy/tY11J4ymNo8bRA0Bbt+e0/o1HimEzBFLKw1LKWVLKWcBcoBt4CXgAWCOlHA+s0e4bGJzTbDjWzOef3s7WstbTds5PP7GFu1dtP23n683m483UOpzsq2mP+PyuyjZm/uCdU55ET5bWLjflzd1MyU6gpL6T/x5W4/D4/Hznpb3M/tFqmiIYsYZ2J1vLW7hu5hj+dNtcbBYT60/VELQpQ+D2+enx+E7pXDr17U7WHm6gcwSM7UhJQyuAY1LKcuAjwFPa408B14/QGAwMRo0OpweAkvqO03bO+nYn6480sfFY84DHeXx+nCcxOVU0dwNwtKEz4vOPvH0Ir1/yyq4Tk2VOF7o38MDKSWQnRvPL1SX8Y0sFn/3bVp7dXEGH00tJXd/v+819dUgJV8/IIspiZvqYRHZUnJqBrm1zBv7f2u2JeIzPL0/o77CptJk7ntxKncM5+MGnyEgZgpuBf2j/z5RS1gJotxmRXiCEuEsIsU0Isa2xcXRWHAYGpwunR8kU/U2qJ4qUMrBS/MU7h5FS8s7+Ot7YW4unlyTylX/t4mN/3Djo+XpTrhmCY419x/zhsSY2HG0mMcbKmkP1ARlmy/EWetynZ0UspeTB/+zjnmciez27Kx0IAbPzkrhneRF7qx18+8W9bDzWzJcvHQ9AmfYZQnl9by0TMuMozogHYG5+Mvuq23F5I4+7scM1qARWrXkEoDyVSHz3P3v5yO82BO5vK2vhR68d6FdKauxQ3kx6XNSA7306GHZDIISwAdcBz5/I66SUj0sp50kp56WnD7qvgoHBgLy9v46q1r6TwkihywW9J1VHt4drfrueg7WR5Zf+cHn9eHySgtRYtpW3csWj73PX09u555kdLHt4LS/vqgbgUF07r+2pZW+1o9+Mln9trWDRT9fQ1ivQWd7cpcbcy3hJKfnFOyVkJUTzg+um0tbtYWtZKxuONvHxP23k+e2VQ/4c//PSXv647lg/46rk6U3lvLG3LmJ+/u6qNorT44iPtnLb4gJ2f+9yNn77ErZ991K+dMl4bBZT4DPoNHQ42VrWwspp2YHH5uQl4fb52R9BAvP4/Fz6y3XM/fFqvrBqO0f68ehqHUFD0BbBIzhS38E/t1ZyuL6DbrcyKv/eUcUTHxzv16Nr7nJjNQsSYoZ/25iR8AhWAjuklPXa/XohRDaAdtswAmMwOI9x9Hi4e9V2fvbW4VEbg0s3BL0m1ZKGDvZVt/PeofDLQErJmoP1/U7eujdw2+ICClJjaep087ObpvPE7fNIj4/iq8/tZnNpM79fG5xkd/Yjf7yyu4b6dhdPfHA8OF6vj9p2JUn0Nl5by1rZXt7KvZcUc9mUTGwWE2/vr+OhNw+pzxRhsjza0BFR635jby1/WV+Kzx++Ki6p7+D7r+5n4bgUYqxmnt5U1uf72VPVxszcpMBjiTFWshNjSIq1YTIJ8lJiKetlCNaXNCElXD41M/DYnDyVr7KjvO/3U97chaPHw8yxSbx3qIE/ry/tcwxArcNJXJSasCNlDv3q3RL0hX9po25g1e3fPizrczxAU4eLVHsUQoiIz59ORsIQ3EJQFgJ4Bbhd+//twMsjMAaD85gdFa1ICWsO1p+UVn4yfHisiWWPrA1Mfvr71jjCM30a2pX7f6CXR/C7945y51Pb+NuG40Si06nOkWK38vK9F/LBty7mE/PzWDE5k1WfW0heSiz3PLOD1/bU8JklBZhNIqIO3u32svV4KxaT4MkNZQGvoLKlBylhcnYCTZ3uMG/hjb21RFlM3DB7DPYoC0uL03h2cwV7qx3YzKbABKdT3+7kqt98wI9fOxD2uJ5y2dTpZsvxlrDnHnn7MLE2C7/95Gyunz2Gl3fVhI2huq2Hpk53mCHoTUFqbEDe0tlU2kxSrJXJWQmBxzISohmTFMPOChVzqHX0BKSuknplBB+8ZgqzcpP6lfaq23qYnK2kJn2cPr+ksqWbtYcbeGNvHVdoxqe0STMEjZ1YTIJ3D9ZH9FabOl2kxdv6/Xynk2E1BEKIWOAy4MWQhx8CLhNCHNGee2g4x2BwbtPujByYC2W7lqnT7fYFMkv6o7HDNWC6ZFVrN1vLWvp9Xuff26spb+4OBPpCM0lCV9gNHer5UGnoyQ3H+cXqEoB+M3Y6NEMQF2UlMcZKrC0oH8RHW3nsU3PocnuJspi495JipuYksD3CindTaTNun58HVk6i0+UNeAW6pLJiUoY2ZnXf75e8ta+OiyakY9dWwJdPzcTt8zMxM55rZmT38SD++sFx3F4/r+yuCfMKakLklDf31Ya95mhDJ4sKU8iIj+bTi/Nxef08v60q8PzuSiUVzRybGPH7AchPtVPW3BWmwW863szCcSmYTOGr7Dn5yeyoaOXt/XVc8NB7/GNLBaA8EyGgKD2O4ow4jjV29dH0pZTUtjmZkq2Mix4s/s6Le1n68FrueHIriTFWfnT9NISA0sZOWrvcNHe5uW1xPkIInt7Ut5ahuctN2gjEB2CYDYGUsltKmSqldIQ81iylXCGlHK/dDn5VGRhEYHt5K3N+uJo//PfogMdtK29hcnYCKXYbr+8Nn3Be3FEVNrF/8dkdfP353YH7XS5vIPjX1Oni5sc38ekntgzoWfj9knUlSurRj9ODxRAeMNYDgsebuuh2e6lp6+GHrx3gsimZXDszhwP9GQKXmmx0OaI3k7ISeOqOBfzh1jmkxUUxJy+Z3ZWOPoHk90uaiLaa+NSifK6ens2TG8rocnkDK+mLdUOgjXl3VRt17U6unJoVOMdlU7KYlBXP966dQnFmHA0drkCWlKPHwzObK5iUFU+328drIYVfeqZNRnwUb+6rw6/JQz6/pKq1m7wUO6C8kvkFyTy54TjtTpWn/+ruGqIsJiaFrOx7U5Aai9Pjp0H7jqtau6ls6WFRYWqfY+fkJVHrcHLfszvxS9hYqnT7I/Wd5KXEEmMzU5Qeh6NHeTChtHV76PH4yEu1ExdlCUhDB+vamZKdwG9vmc1r911IRrzyPEobuyhtUt/n0vFpXD4lk39trezzm9KloZHAqCw2OGv5w9qjeP2SR94+zOoD9RGP8fj87KpsY+G4FK6YmhUmD713qJ6vPrebX76jVt9en5/dlW1hcsL3XtnPop+u4bdrjnD309upau2hx+Nj2wD1AHurHYHJoidgCHwkRFuwmEQvj0BNUlLC4boO1h9pREr4+uUTmTk2kbp2Z0QPRZeG4qP7DyQuLEzlkklKjpibn0yPx8eh2nD9fl1JI4sKU4m2mrl1UR6dLi/rjzRR0dKN3WZmVm4SNospMOa39tdhMQkunRzU2FPsNt768kUsKU6jKD0OCOrgqzaV0+ny8ouPz2RCZhz/3BoMJOsewe1LCmjscLFN81hq2nrw+CT5qbGBYx9YOZn6DhcP/mcfL++q4a39ddx3STE2S/9TWH6qMiRlmhSzqVQZ/MiGQMUJcpKiWTo+jR3lSiYqqe9gvJZdVJyhPptuyH/46gGe3lQe+Bw5idEkxVoDweKath5m5iZx7cwcclPUZxmXZud4U1dAPitKj+MT83Np6/aE1WNIKWnqcp8b0pCBwcng9PgGzesuqe9gzaEGvrC8iBljEvnyP3dyvKmrz3EHatpxevzMK0jm6unZdLt9PL+tksqWbr72nFr576t24PdLSpu6cHmDK0iAIw2dCAG/WF3CtvJWHv7oDGxmE+8f6V9iWns4GPjVUyl7PD7io63kp8b28QhS7epiP1jbwfslTWQmRDEhMy4gNfSOH0AwWNyfR9CbuflaQDTke61o7uZ4UxfLJqisvPkFKcRHW1hzsJ7y5i7yU+2YTYLCNDvHGjuRUslCS4rTSIy1Rnwf3RAca+zE4/Pz5IbjLJuQztScRD4+L5ddlW0c1nL79SKsTy7Iw2Yx8YbmrVW0KEOcnxI0BHPzk7l/xXhe3lXDN1/Yw9z8ZO5eVjTgZy7QDIFu2DeVNpMca2ViZnyfY6ePSeSBlZN4+s6FrJiUQV27M/D9TMhUnylgCBo76XR5eWpjGb9aXRI4f05SDMmxNlq73Tg9Ppo63YxJiu7z/ZQ2dnK0sROb2cTY5FguKE4jxW4La5PR4fLi9vpHJHUUDENgcAby0s5qbvzDh2zrpcUfqmvnB6/uZ+2hBv647hgxVjN3LS3ksU/Npdvji1jYpK8y5+WnsKgwhfzUWB58eT9LH16L2+vnC8uL6HB5KWvuYn+NUjA7Xd5AQLfe4eSaGTk8fecCfv/JOXx8Xi7zxyWzrleswe+XgbTAtYcaiNcm6G7NELg8fqKtJorS48IMQUOHi1m5ScRHWdhb7eCDo00sHZ+OEIIpOcoQREprDBiCATyCUHKSYshKiA6LE6zTjNlFmiGwmk1cPDGDtYcbON7UFViR62N+92AD5c3drJyW1fcNNPJSYjGbBKWNXWwta6Gp080tC3IBuHHOWKxmwUs7VWprbZuT9Pgoku02Fo5LCQSM9Yk1L8QjAPjixcUsGJeC1Sz45cdnYjEPPH3lJEVjMYlA5tCm0mYWjkvtEx8AMJkEdy8rIjclljma0XxhRxVev2SCZjiyE6OJtZk51tDJtrIWfH5JS5ebJ7WAfnZS0CPQjVxOUkzY+xSm2+ly+9h4rJlxacrQWs0mrpquvFX9d9ekLUZS4wyPwOAsY/WBejYcPfVujvpE8Nv3lPbv90v+sr6U6367gSc3lHHH37by4o5qPjE/l2S7jZykGKblJPLhsb7vvb28hTFJMWQlRmMxm3jl3gt57NY5fGZJAb+7dQ4fmZUDwJ4qB/urgxNuQ4cLn1/S2OkiKyGapePTuXqGyj1fNiGdw/UdYbnj/95RxfTvv8N3XtrL7ioHl01R0okzRBqKtpopzoijvLk7oNU3djjJSIhiUnY8r++pwdHjCUzMSbE2xiTFRIwTBIPFQ88xn5ufzNaylkCw8/2SRsYkxVCYZg8cs2JyBk2dbsqauwMTcVFGHOUt3Xxh1XYmZydwzYzsiOcHsFlM5KfEcqyxk3cPNGAzm1g6Xn2eFLuNKTmJ7NEqgmscPeQkqhXztDGJlNR34PL6KG/pwmoWZCeGT6Jmk+DpOxfw3teXB2SfgbCYTeSmqMyhypZuqlp7WFSYMujrJmcnEG018fw2JWON1zwCIQRF6XEca+xkU2kLVrNgTFIMW8tasZlNpNmjSIq10dbtpkaLf/QxBGnqXHurHRRlBD/DdTPH4PT4AxJnsxaXOieCxQbnD1JKvv3i3kAuOSjJ5Z9bKjje1EWdw8mLO6p4N4KW7/X5w8ro9Ql2XUkjuyvbePDlffz49YMsm5jO5u+s4Nc3z+L6WTncszwoDSwpSmVnRVtYVauUkm1lrcwvCPY1TIyxsnJ6Nt+/bioXT8ygOD2OaKtJGYKadvTFYkO7k6ZOZQwyE8Pde32iXl8SNDyH6zqQUvJPLdtk5XQ1WQZiBF4fMZoh8Pol5c3deH1+mrvcpMdHMyU7gXanFyHgwuK0wHmn5CQEPJVQOl1erGZB1AAaeW8umpBGrcPJwdoO3F4/Hx5tYtnE9LA89eUTMjBrX0K+FqydkBmHlEpbf+7zi4iPjiwL6RRqk+WaQ/UsKU4NZBcBTMmO50BtO1JKatp6ApP9tJxEvH5JSV0nFc3d5CbHBsYRSpTFTGZCdJ/H+yM/VdUSPPruEUwi+LcbCKvZxIyxKnhsEkG5C5Q8dLShk02lzczKTeKTC/MAyEqMxmQSJMdaaQ3xCMZE8Ah0Qs87Lz+Z7MTogDwU8AiMYLHB2cShug6aOl0cru8IrHa//8p+HnhxLxf//L8s+ukavvrcbu5etT3Qw0bnd2uPcukv1wVK/GvbnEzNSSAxxqq1Ca7g7mVFPH7bXDITovnIrDE8evNsMkImhMVFqbh9/jDpo8bhpKHDFXD1I2Exm5iak8juqjb21zgCWnp9h4t6raAqq9fEMzEznsyEqLDgXmOni7HJsbx231IevmlGwPjo0lCPO+gRgKo0be5yI6XKmpmsxQOmj0kkxR6UA6ZkJ1CqZRSF0un0EhdlOaFio0smZSIEvHuwnh0VrXS5fVw0PnxiTIy1sqBArZoLNI9g5bRsHr9tLn/9zPxBjQBAUYadIw2dlDd3hwWV9c/T1u2h1uGk1uEMrJinj1FpoPtqHJSHeCOnSkGqnYO17fx7RxVfvLiYwpDJdyD04HF+qp1oqznweHFGHLUOJ3urHSwqTOVj88ZiMQmytcVCUqyNdqeHytZuhFAGIpSshGhitPOFGgKTSXDtzBzeL2mkw+kJNMszgsUGo4rfL/nuf/YG3PjBWK/pzW6vn9LGLjw+P3urHVw/K4cfXz+N7149mWc+txCzSfDompLA66SUvLijmk6Xl6pWtYqqbe9hfEYcd1xQQFu3h89dOI5vXTlxwElvfkEKFpMIk4f2VKqxzxjbf9GRej6RnRWttDu9LJ+o0iUb2p0BLyUzIXxVJoRg6fh0NoS8V2OHi4z4KKbkJPDx+bnE2NTFHpo+Gm01MT4jHiHgcH1HoJgsXXsd0GdinpqTgJTK0IbS6fIOOT6gkx4fxezcJFYfqGddSSMWk2BJcd8MmiunZamVsGa0zCbB5VOzBszQCaUoLS5QRbticngrMf1zbjzWTLfbR44WTM1NiSE+WsVJKlq6wwLFp0J+aix+qQzNl1aMH/Lr5uSp34weKNYp0lb0Pr9kUWEqGfHRPLByEp9alA9AcqwVKVVdSGZ8NNZecQyTSTBOk+KKehmlRYUpeP1SW1S5EQJSYkfGEAx/EwuDs5IDte2s2lRBdWsPT96xYNDj1x9pIj7KQofLy4Fala/u8vq5ZHIm183MCRx3+5IC/rK+lHuWF1GcEc+eKkcgS6SiuZtxqXbqHE6yEmO49+JilhSlMb8gedCVrz3KwszcJD4M6duyu8qB1SwCFZ/9MWNsInqHgyVFqdgsJho7XAHZpbdHADA+I44XtlfR4fQQH22locPF+IzghW0zmzCJYNaQ0+sjymomxmYmPyWWkvoOZmjFUBnxUUzNSeT+FeMDUoNOaMBYX6WCihHERQ2+Ou/NpVMyefitw7R0uZmTl0xChBX+pxbls7go9YQkmFB07XvamIQ+Ov9ELe9fb6mhewRCCKblJPJ+SSOdLi95Q4gBDIUF41IozojjV5+Y2WdSHog5+ckIQZ86Bd2js5pF4O/xuaWFgeeTtYl7X3V7wMj1pjDdzoHa9jCZCGBKtvo9HKhpp6nTRXKsbdCA+OnC8AgMIqI3wlpX0hjQO/vD6fGx+XgLN80di81iYn91e6BF8Kxeq/G7lxURYzXzyNuHA4VBuhRc3txFU5cLj0+qjA+ziQXjUoYsfywpSmVPVVug2nhvdRuTshKIspgHfN30MWqMZpNgcnYCGfFR1Lc7qWt3YjYJUiME7HSXX/caGjtcpMcHjxNCEGM1B2MEbl9AEpiQGc/huqBHkJEQjdkk+MplE/pMvmOSYkiMsfYJGHe6PIHMpBPhci2IXd3Ww7KJkfVys0kEMmVOhuL0eKxmwRVT+mYXxUVZKEiNDchq2SHSybQxCQGvsOA0SUNTcxJ596vLAp1Gh0paXBTPfm4Rn71gXNjj+al2LCbBrNykgNcXSpKWVlvX7mRMcuTPcO3MHD4xLzcsdgLK80y129hf46C5003aCGUMgWEIznkc3R6e3VxxwrsmbSxtJi3OhgSe29a3m6SUkv97/QB/XHeMzcdbcHv9LJuYzqQsFQzcXdlGcqyV3JTwFWGK3cYXlhfx9v56/riulNf31nLxxAxibWbKW7oD1aa9V5JDYXFRKn4Jm0tb8Psle6ocgVX3QBSmqYrQonSlB2cmRNPQ4aLOoeSeSEFLfXy1Dicurw9Hj6dPzneMzRKIETi9ShoCmJgVT1lzd2DSG+iCF0IwJTuBA70CxicjDYGSI/RJtrcMdbpIjLXy+peW8vl+8vwnZycE0l9Ds2qmjQn+rfJPkyE4FRYXpfapl7CaTdy5dBx39DIQOkkhUk5/HsEVU7P42Udn9HlcTxk+UKs8gpHKGAJDGjqnkVLyted38+7BeubmJzMxa2irIq/Pz5bjLVw3K4fKlm6e21rJfZeMD5sQ3z3YwJ/Xq/zpFLsNm9nEwnEpTM1J4M19dTR1upiZmxRxNX/P8mIO1XXws7dUhtEDKydR3dZDRXN3IGMoO/HEZYm5+ckkxVp5aWcVRel2OpzeIRkCk0nwqUX5gQk5Iz6KIw2dmE2iX3kkO8Qj0KuIMxJ6GwJTePqoJegR+Pwy0ABtMI9lak4CT28qx+vzB6SCTqeXovQTv3yFENwweywv7axiak7/7RlOlYE8iinZ6jdiNYsw46kbAiFgbD+r6TOBb6+c3O9zySGGo3fG0FCYkp3AkxvKSI+PGjDJ4XRjeATnMP/YUsm7B1W6pt7O2NHj4WvP7ebTf93Cp/6ymbf21fbxFvZWO+h0eVlcmMotC/KocThZG9Im2enx8aPXDlCcEccDKyfR2u1m/rhkYm2WQFZISX0nM/sJ0ppMgl98fCaLClNIiLawYnImeSmxyiNwRM6/HgpRFjMfmzuWd/bXs+agGu9ggWKdB1ZOCmi9AWnI4ewTKNbRJ/1ah5MGLbsoVBoClDTk9iGlpMfjC0gJukHeWdlGRvzgq74pOQm4vP5A10rQPIKTkIYAvrSimDVfWx6xsGok0OMemQnRYWMYl2rHbjOTlRAdlqlzNhHmEZyEVzslJwG3z091W8+ISkOGR3CO4Pb6aep0BSbQ8uYufvTaAQpSYylr7sbRowzB9vIW/r2jiomZ8Ti9Pu5etYOl49N49BOzAlq43nBrUWEqiTFW8lJi+da/9/BCxhLGpdn58/ulVLR08/SdC1g6Pp0Li9MC2uiUnOAKfNYALYKjLGZW3bmQ1m4PcVEW8jXduKathyiLKWxldSLcsiCPP68/zq/XHNGydIaWLhhKRkI0HU4vHl83S4r6ZtXo40+Li6KuvSdkJ6lw7yHGZqHb48Pt8yMlgcmtINWO1Szw+GQf4xGJqTnBIKK+0lbBYrNqUnSC/eqFEJhHxwYABFJle0+UJpNgbkEK1lEyUKeDhGgLZpPA55cntZjR24rAyBWTgeERnDOs2lTOJb/4L44eFSh9aWc1Tq+PX35iFhDcNam1S90+/um5rPnqMr537RQ2H2/hGy/sCXgGG481MyEzjvT4KGwWE3+7Yz4SuO2Jzdzy+CZ+sbqEK6dmBSpGp41JDLjyk7LiA/PSYLKMxWwKTIR5qXZcXj+7Kx1kJ0af9GYchelxXFCcSqfLy7ScxJPKutBX6U6Pv08xWSjZidHUtDlp7AymgYYSYzXhdPsCnUf1LCSbxRSoMM2IH1wCK0y3qyC8Fidwe1VG1q0l98OrXzrBTzf6ZCdGk2q3MTal70T5+0/O5tGbZ43CqE4PQgiSYtQiZkzyiRuCcWn2wO/ECBYbnDAHalVzNb1fy9ayFiZnJQQ24GjTDITeIjdJS02744JxfHvlJN471MCzWyrYVdnGtrJWFod0aCxMj+Nvd8ynrdtDaVMn3716Mr/6ROSL1R5lYVyandyUmIjZNv2h543vrGw9qUBxKJ9aqHK6hyoL9SY0LhApdTTwXGI0dQ4njR0uhOjbF0bPGtJ3JwuVOyZo8tBQPAKr2RQIwkOwz1Bm50HY8Xc4snqIn+zMQAjBk3fM5+uXT+zzXHy0dUhFa2ckz38G/vNFkmKtxEVZSDiJYL5F+1vDyHoEhjR0jlAe0lhr2YR0tpe3cvP8PKKtJmwWU9Aj6HZjNomwH+ntiwt471AD33t5P16/JNVu4+Pzc8POP2NsEh9862JibZZBC4u+dMl4/CeYpZSnGQKPT5LdT7bFULl0Sia3LMjlxjljTvzFnh4yQ9K7B8qlz06MZnNpM40dLlJibX3y1GNsyhDoKaTxBCuqJ2bG8SpEjhHsexGKLoaYYLBwSnYCb+2vU5vWO71Y8RLl1YrMXvsq3LMRovqRwbwu8Hn6f74/3N1w6DWY/rH+5afuFogdvH9Pb07WSJ/RVG0HawzJsbdiNomT9mqn5CSwu8pxQgupU8XwCM4RjjepSWbjsWb21ThwevyBHPykGGtg+7yWLg/JsdawH6nJJHjkozOZmZvEl1aMZ903Lw7o0qEkxdqGVF16/ewx3Dhn7AmNf0xyTCArKSchCjpPfitrq9nET2+cEZaOGODgq3D0XejPUD13O+PWfSVwdyBDkJUYTbtTbeLSZ2UvJRnCQY8mDc0Qx7ixF06RAAAgAElEQVT27Qug4SAQzKrp87qmo/DCHbDhN2EPT80JtmbocHlIRUsnnXkLOCpg1U3KO+jpVQkuJfzjFnjyyn4/R7/sfBpe/H9Qvz/y8xWb4JEiOHAO7zYrpVrp731h4OP8PmivhrYKPntBAfcsLz7pt5yVm4QQMMbWDTU7weMc/EWniGEIzgE6XV6aOl0kxVo5WNce6GA4X+sZE7pZRlu3O1D9GEpWYjT//sISvnrZhJPORjkVrGZTIO96cc9a+NVUaD42yKtOkK4meO52NWn+aSkcWxv+vM8LZeuxNu3HqkVTe/eKCUUPdu6paus7oe9cxXePfIwodwtOj49c0YhJ+uD4ekDlqH9kVg6Lewejyzeo215yT2iFcafTS6rQCswmXQMrH4H2GnjlPnh8ebgR3fUsHFsDdXuhq5kTQh9La4R9k6WE1d8D6YcPfzfweaSEZz+hDNXZRmc97H9JfbdNA+yE11kP0gfeHq4qtHL97JPwRjVumjOWV++9kPSGD9XfM9L3f5oxDME5gC4L3TB7DFLC0xvLKUy3ByanpBgbbT26RxDZEJwWOurUZHuS6PLQWHcZ+Nyw46nIB7ZVwJ9XQOl/1X0p1arV7498vM7BV9XFuvzb4O6Cp2+A9x8Jvq7hAHi6EY4qMuNsxEVZiPM61PtFQDcS7U5vX0Ow/Uks0ovd00qPx0es0FZ11dsBpYX/+ubZfYPFFZvUbf1eNblrTMpKQAjYX6NSe9N0Q2BPh4V3wZf3wG3/UX+DVTeBsx06G+Gd/4F4rW105eaBv59QpAyOpbXvfrqUvA2Vm2DMXKjaEly5rnsEHFXhx9bsgJK34PWvQd2+oY/hTEDz4PA64d93gtcd+bjQz9wW4fs6ASxmk/Jm9d9dYu7ALzgNGIbgDOVvG47zx3VDWxGXabLQR2aNIdpqotPlDXSQhN4egSeQ6nla8fvgyZXw0udP+hT6HrVJnjr1wM5nIl94u/8F1dvgn7dC+UZ4+Yvw2BJY+38Dv8H+lyC1GJZ9C+7+AKZ/FN77Maz5gXpem6TxuRkf16NqCF7/Kvx+ERx/v8/pQovewgxBw6HAuczebmUI0HY9q9428BgrPoS0Cer/IV6BPcrCuFQ7B2ra6XR5g9KQXWtZLYSKK3z878ooPlwIv5ysDN4t/wSTdXBDcPA1+MNiZURaStUqF6C1LPw4vw/W/BBSCuHWF8Bqh02PKRlp7Y9h3797nfdVEGaITlLHeAZuWXJKtJTCe/+n4hung0atrfpVj0DtLnj5nsjjd4RU35+iIQg7Z0zKicd2TgLDEJwhfPvFPfzyncOAqgh+bN0xnvhgaC6hvgPT+Iw45uUrA7BgXGRD0NLtDmtzfNo4+Iq6CCs2D74y74eJmXHYzCbsPbVgi4PuJjj8euT3ypiiLpInr4Rdz0D6JNjwaP96dmcjlK2HqTeoSdNmhxv/rKSVXc+oyS1kkv7kRFVtTMNB8HTBqo/Cxt8rI1SrtrgMjR9MoALe+ja4OtX5NGKFE0e3J2gImo9CT69tOI+vV8Hc9lo16c65HRLGwpF3wg5TexO00xEqDdl7tYmYcDl86t+w6Avq3y3/gJxZ6l/llv6/fFDfX8MB2PdC0BuISgif2KSEdx6Ehv1wyYMqUDzzZtjzL/V3EaZwwyGlMgTjlsINj6nzbxxESgK1Gh5IipESStfB36+H38xWcpiU8PK98P7DKs7i8/b/eh2/X3mWoTp81fbgAqThoPqdzbsTLvku7H0enri8r5foqA4feyTe+zE8cUX/XkVv2iogafi9ATAMwRmB3y95eVcNqzZX4PdLjjV2Ud/uorHDFahaHYiypi7S46OwR1lYUpyKEL0NgZKGpJS0dbvDqh8j4vP2H0yNhJTB4Ka7A5q0NtOtZUqbHiK3LMzjjfuXYmmvhMnXQmIebH1Cadturaq2tRzq9qgg6W0vQdEKuOVf8Jk3IDpRabl+X9+TH3xF6dlTbwg+JgRMuxG6GtVquXoHJCht97IcN3cszlP67OxPQdY0ePs78NJdSpaq2ES01RwwqtNb3oFNf4Cnr1eToubOx+KipcsdlIZAySg69QfgqWvgvz+Fio3qsfzFMP4yNUGFTBpTchKobuuhuq2HVNGOtERDVIRWDkUXw+U/Uv+KL1WP5S5UEk3oJFSxGVb/r/q+6vZB1VY1kW//m/JMopNg3EXh0tCGR2HT72Hh3cHvcuHdYI2FpV+D7FnhhqDxsDJ+k65RY0mfrL7nwXjlPvjrFeDsuykPAJv/BH+/Thl+R7UyAPtfVHGN8ZcrKerV+8N/x70XKD2t8I+b4e8fUQFhnxc2/gH+cgls/K02/kOQMVn9Vi76BnzyOfV9/Ou2cEPjqFJGMyYlsiGo2Azv/1zJaZv/2P+YQmmrhKS8/p8/jRiG4AygvKWbbrePli43u6va2BjS535vdeQL4a8fHOfjf9yIT9vtapzWtvezF4zjhbuXhPVqSYyx4vSo3bA8PkmKfQBpqLtFyQq/nQPvfBdcHf0fG/gAH6pJZuHd6r4usfz7c/Cni+CDXw3JsERZzBSnWJXOnVwAcz6tVvGPFKoxHXtPpTMCTL4G0orhthdh4pVgT4UrH1Lvvff54El72tSKe+fTSnLJmBL+puMvB7MNdv9Drf6mXK8ed1Sqi9vnhrEL4M7VcN8OuGeTWqX96zZorwnUGaS4a9REULtbSSrzPgtALE7aut3E4kKaNQNctT34/o2aBv3h75QBsdohayZMuALcncGALcEK4y3HW1SMwJ429Kri3AVK567bo+77/Wqy3fBr+OCXavI3R8GyB9Rn2P8y5C1Sf4e2cvX3q94O734fpn0Urvhp8L3TJ8A3S2HF/6rjQw3BwVfV7aRr1G1KofIce1OzUxkN0N5rp/II1z0c+fMceBkyp8GX98JlP4Qjb8N/7oGs6UoKu+DLsGtV0EOs2QkP5anPCcrwPX6xCqRP/xiUvKkM8tvfVs8ffU+No+GQ8jZ1JlwB1/1ayUSbHws+7qiCxLFq4u5tCLwu9V0njoXCi9VnaixR2Vy/nqme742U6jyJ54AhEEIkCSFeEEIcEkIcFEIsFkKkCCFWCyGOaLcj11npDCW0xfDaQw1sONpMenwUQkQ2BI5uD79aXcKWshbeL2nkeHNwo/Foqzmwy5aOHhMo03rVBDyCSJN82XpwOdTK5sPfqn+DseHXEJuqJoKoBCWxdNSrFWZ8tpo8/vUppT2H0lqmMk/+cYsyGlJqQTepVtSLvgDXPKqyYlIK4YXPwo6n1QSQUth3HNM/Bkn5QUPQ0wa/m6cu8JqdMOvWvhNnVDwUXaLiEUi1mo5KVKuxFi1Gk1oEJrO6zZgMNz+rPJR/fy6Q6RTXXakm21ufh/n/T3kagF04ae32EIsTGZ2sjFF1iCFoOgoIdf6St2DsPDBb1Eo8Ogle+VIge0pvP7Cnqo1Mcweityw0EGO1PSX0OMHBl6HpsIqZrP2pyi6a8hFY+HmwxCjPLm+xmti9TmXcStep1658GEy9pg6rVgSYXKAmMN0rO/Sqeu8ELWCdWggtx8NXwu5uePpG9VlB/S5cDrBnqNXz0Xfh9a8rSQqURl+9DQqXgzVajblohRrnlT9T3+W8O7TPq0lch99Sn+nV+5XB+Mul6vjPvAE3/UUZwIqNULBULWgqN6vv3eVQf/NQplwPE1aqWESLJt+2VylvMpIh2PBr9V1f8yu46ufg7YHHFsPhN1Tqb4T4E93N6rhzxCP4NfCWlHISMBM4CDwArJFSjgfWaPfPaw7UOrCYBNPHJPLuwQY2HW9m+YR0CtPs7Ktu73P8Ex+U0uHyEh9t4c/rS2nscFGQ1v9GHnqW0HHNEKTE2mDbk/BQPhzqpcEfX69WpZ99S62eB3PjK7eo1diie5TunjNbTXQlb6nnP/kvuOIncPhN+PPFaoWl89+H4MPfBFfxrceDQbekPBUkm3eHyoq5+Rkl7TQeVLJRJIRQckXpf5Vns+c5Jfvc+Gf4ygG48MuRXzfpGpVNBJAzR634HZXB9NWUXu2UMyarc5VvID/OC0ii2ssheZyanK7+eaAYLBYnLd1uYoVLfT9j5qpJTPeQmo+o91v6VXU/f4m6tdnh0/9RXsFfr4Smo6THR5ERH6V6FIn2vvGBgUjIVt9pxSY1Cb//c0gdrzydhBwVB5n7GYhJgmk3BceSXKD+31oOVdvUd2GP3H8JUMf7vSqnvrtFeRcTQ2oYUgrB54KOYEYUu56Bnhb1O/D0BGIwXP8HJTmtugm2/ln9Vtpr1Dh8bii4UB0nhAqS3/kuFFygHkvKh7gsJcmAkroypqpJfNczMGYO3LUO8haq55c/AJ9+Wf1eJ1wBfg9s+6t6LtQj0N/v6p8rg7PuZ+qx3h6B/vdtq4T1v1S/y/GXKS/2om8oo3H7a2CLV7Jlb3RjcrbHCIQQCcBFwBMAUkq3lLIN+Aig5wU+BVw/XGM4WzhQ005xRhxXTsviQG07bd0eLihOY9qYRPb18ghau9z8dUMZV03P4rZF+YEduQoG2NFJ732iG4JxjWtUNoz0wdqfhK/Ojr+vJAGzVem9tbv6l3WkVKt9e4ZavYOa6Or3qwydxDy1el/8Rbj9FaX3rrpRrRb9fpUVM+0mpbsC1Ozq/wJIKYSP/hXSJqqVf39MvUFNRAdfVTJAzmyY8XFIHCCve+JVShtPHqcmucRcdWE3H1NGMb7vBitkTQfgsrQ2rhwXhXC1BydNUK9DxQhau9zE4kREaYagqzFo8JqOqAl58X2w5D6Y9cngOXJmwx1vKs9ty+Pq42n1BCk4TswQgPIyDr4Cv5sL9fvUhBSbojycFf8bNELLvqGklZw5akIFtUqv2qq8noEIGI6yYCxkzNzg87onpxtZv08F4W1xavKt3qHkK5PmFd3wRzXO2zVJ8MDLmlwmlMeiExUHufOD94VQY63crALxVdtUwPqjf1Xn+vTLEJ8ZfnzhcmWA8xYrmWzn0+q53oYA1KQ/caXyVtxdagWfOFZ9X16n+hsDrNa8mMt+FHzt8gfg/t1qPBMuh0Nv9I1rjWDqKAyvR1AINAJPCiF2CiH+IoSwA5lSyloA7TYj0ouFEHcJIbYJIbY1NjZGOuSc4UBtO1OyE1gesmPU4qJUpo9JpK7dGehuCfDEB8fpcnu5f8UEblmQF1A6CtL66d9et5fCI08g8HO8qYtcUU/huvth7HzlqtbvU/ooKDmn6bC6AEFlmnQ1huWzh3H0XXVRLvumuoBASRt+L5SuVRdKYIAXKre4vVoZmxpNAx5/ufI8zDZldNoq1aScEGHiLr4U7t2iJJr+yJ6pJvT3H1GZLXM/0/+xOvZUFRCe8Ql1Pyk3KA2lFEbW4bXJYVFcA3+8RgvMp4RsVmK24DfbsAuX6rAqXAirXX3voDwpKVUgNbVYSRyX/7ivFJAxSRkdTetWhWWSJOkIpo4OlSt+Apf/H8RlQv6FwZV/9gwV6NU/Z3IBXPYDJVHp4yl7H7oa1N93IEINQe0u7fwzg8/r3pUeJzj0mvIEL/+xul/xofII0ieDJQomXa2ydcYthczpaoFR9oEK3scM0qYid6GKbxx5BzzdaoFjMqtzmQeIk1ljlKfgaleSZ1w/Brdwubo+jr6r7useAaiJvGyDGu+FX+67sNG/68nXqutAz9LSCfWMR4DhNAQWYA7wmJRyNtDFCchAUsrHpZTzpJTz0tOHZyelkUJKyV1/38bre2r7PNfU6aK+3cWUnASmZCeQmRBFcUYcmQnRgRYJ+7Suk50uL3/fWMaVU7OYmBVPbkpsoANofm+PwOtWmuqflpG1+SdMEpUcb+pikqhE+N1w5U9h9qfVpLnuZ2pSKlNVr4xbqm6ztcZy+gUd/qFULnlygUp31Ald/YVKAgATrlQxhL3Pa6mRQk3uFpsyBrpHEJ8z8IU6ELo85KhUq0x9shuM634LF2uBwsRcpQ3X7FKadiSS8pVs0XgoqBMnh+9a5bfYicVJa5ebOJMmDWVOU+Oq2KiC4u5OSBtkU/XMqarATEqm5iQSRw82PCfuEUQnwpJ7lex3x+tqoh8Ma7SK8xzQgr5j5w98fMIYtZpvLVPfX3JBWM8kEsao1bZuCDY9pr63OZ9Wk3/5RmUIsvvu4MXU69UKv3KzMmSDkavJPht+rW5DPYjBKFyubtP734QmcMzOVeo21BC0HIc3v6XSgJcM0CG2+DL1fehBdZ22Ci0LaWR6Mg2nIagCqqSUehXLCyjDUC+EyAbQbk++qcxZQmOHi3cO1POTNw7i8YWnix3UOkpOyU5ACNXz54cfmaoe02SAfVXKEDy3tZJ2p5e7LgpOTg9ePZkfXDeVuKOvwe8XBvOhdzylNNW8RQAkiw7KmrtIEZ3qeXu6mgiWfk1deJv/qAxBVILKWgG1EhUmdUEDfPBoMBe9dK1y4Zd+XU3kOvFZ6mK3xfe9WK3RMPk6OPCKWgmOnR9sWJYzS43jdORO62mN0z8aOb1yMBK1PkldDX3jAzomkwr8NhwMtgAIlYYAabNjF1qMABfYYtV3Pna+mvCaj6gDUwfpS5M1TclqjiqmZCf0X0MwXCTlK8NojVU6+0CYLcqQthxXCwh9MaFjMqnvqaVUpQVXbFKpwCaz+q2WfaBW2VmRDIH2d/W5g7GAgcieqSbZys3K2ESS+PqjcLm6zYggC+kkjlWyXphHoP121/9cGe/Lf6T+7v0RFaeSFQ78J9zzHsHUURhGQyClrAMqhRB6r9kVwAHgFUBfQt4OnMMdqxQl9WryrW7r4T87VeHJ9vIWypu7AhlD+mYdF01IZ0mRcvkToq2MS7OzpawFl9fHEx8cZ35BMrPzgius8Znx3L6kQE3MjYeCuehH1yhZ46qfA5Bm6sTp8ZNl0you9VXazFuURv7WA6pYKn9JcKVoi1WafO0uFXR793sqbbKnTdUNxGUp/b03i74AF30t3EDozPiYyt6o36dkIZ3sWeBsU2mop3oBZE2HG/4EF//Pyb0+9P0HmqQzJmseQZn6Lnpd8MJmJwYXbq9f1RHYtArR/CWqsKpKK2Ab1CNQ8Qjq95OXEkt+lPY3PFFp6GRJ1uIEOXOG5kUkFyjpr61CGfjepGiZQ6VrAQnFK9Tj+UtUIBnC5SSd1KKggchbMvg4LDYVFIYT8wZA/R6nfRSm3jjwcYXLVRIDQnmyUfEq467xEORfEF630h8LP69qGn63IBigdlSOWHwAhj9r6D7gGSHEHmAW8BPgIeAyIcQR4DLt/jlNSb1K08xNieGx/x7jT+uOcdNjG7n8V+/z7JYKchKjSe6n2nfFpAzWH2niwp+tpbqth7su6meF2qStLo+tUcGxsg/Uj1RbcefYVFl8lqVbtRvQJyWzRWVcTP+4Slcbtyz8vDmzlUfw4W/UKr+rAZ6/XV3ECz+vdNzeLLkPLvxK38dBpefFaSuz8ZeFvI82YXidp34BCKGqXeMihp8GJ/T9B4pHpE+CjlrlyfTyBgCw2bGjPLQYXGpFDZqXJlX2ijVWTSADkanVPtTvxWQS/PhyLchpP8nPd6LoAePB4gM6yQVBLylndt/nU4uUR3D0XbUg0Y/RvFcQyguKxLJvweJ7B85cCkUPbuefoCEwmeGjTwzueRQuV7dxmcGFT1IeIFRdy1DqPIouVm3Ex86F176iYmgjWFUMw2wIpJS7NJ1/hpTyeillq5SyWUq5Qko5XrttGc4xnAkcaeggKdbKt66cRGlTFz998xArp2WxbEI65c3dantHT0/EwpLvXDWZP9w6h6QYK9PGJLBiUj8Xv17Ne/Q9lXnh7lA/0hhlCDKtahWZZulWxiH0B2q2qhX0J5+D+XeGnzdnlpr8D72mJv5F96j0TFtcoGjqhNBzvNMmhq/6MqYoAwUj6hJHxJ6uJAXoXxqCYH55/d7wQLGGKSouUFEcI53BgPqYeUpHbz6q1SgMchlGxavJVWvYlmcLkfdGAt3IDZYx1Pt4iLyyTxmnFh0HXlG/UZO2YU9SntLUU4v6l/QmXwNXDNJTKpQJK9UCpnD50F9zIhRcqORTXU4EWHCXGmOkOEd/pBSqQriEMfDmAypQPYLXgbExzQhQUt/JhIx4Vk7L5tLJ1UzIjOfrl09ECNhwtJnclBiVK22JVn1ieu0VcNX0bK6ano3fLyNvON7TqnTVuCyVKbP7H4BQq2+LDWxxpJu1GgLRGTAOYZhMKn+6N7rGa45ShsBmV97G5GtPPpC17FvqX6gxskSplW/t7hFdCUXEpF3YXY0Dyy+haYXJkQ2BHRcm/EThDhoCW6z6Xqu3KY15KGROC1bJ6h1eY4e4Kj5VJlyheu0ULh/a8boh6B0o1tFTSD1dqhAslBUPqon1dJG/GL5TNfhxJ0tMkpJWQwscZ996cueyxqjU0lfuU/dHUBoyDMFppsvl5WhDJ1WtPSybmI7dZuZIfQfXzszBbBL85fbwrIsLx6epnPrqHWqVVLpWBY8iENEIQLA51/zPqe6PO/6uVvJ6IDYmhRSfVlVMZ+SLsz+ypisDFSq13PXfE94wPYz+XputBYx1KWI0SZugVtwDfc7EXFUv4OmK6BFgs2MXLmI1eShgCEBNUNXbBo8P6GROU5Wo7m5loKKTIsdghgN7Glzzy6EfrxuC3oFindBJs/dvfebNJzS0M4Kbnxn8mKEy85Mq/tZ8xPAIzlbanR6W/PS9wJ6y9ywv4vYlBbQ7vYEdqSLiqFBGAODdH8C45YPLBaHostDUG1QFZmd9+OotNpnkDhWniJcdEHsCu4fZYlUFZnLI5HwqRmAgpmhNxEZwJdQv1/1W1UMMhMkE6RNVgDtSjMAai104VXxAux8gb7Fq3zFUjyBrWrCyuqtx5GShkyFlnPIgA5p/LxJzlQyYWjRwod/5iNkCKx9SrVf0duQjgNF07jRS53DS6fLyxYuLWFSYwsu7ajhcpybg8ZkD9BRv1CbyOberDJ0tj6u2yZEqeiu3qtYMoW1vm0rUhZVcEFxhFS4PPh+TQoJU44j1tZ+YRwAqhU7vJTOcFF8K/2/NyK10ByIuPdgfZyD0OEEEaQhbHLE4seudR20hv4Hiy2DF91TR3VDI1NI2a/coaehMNgTRifDFzcpDjYTJrIr3+nv+fKf4UvjChhHZh0DHMASnEUeP6vm/qDCVm+fnUd3Wwz+2qFLxAT0CfUV/yYNKinnrW/DzYrWJR282PKpaFv96ZrAJlx50NFuUMSlaAbkhq7HYFOz+dkAS43Wc1GbjBv0w9QbVvyZSLMFmJxoXdt0jCE0vtdhUf6GhXuxJBaqw681vqp48I5U6erKkjBu4KPD638OCCL9vg1HBkIZOI/rmL0kxNubkJRNjNfPmvjpS7DbS4iKkWeo0HQ6Wst/xliqA2fSY6kHi84RfUHV7gtlAH/5GFU01lQTdyPzFqjVzKDEpxHgdxODC7HdHDhYbnBzjLwtPgw3FZseEJEUvALPZIx83FEwmVRH8waPBjXgMDE4ThkdwGtE9gsQYK/YoC1dMVfnexRmDrPoaS1Q6JagVYvEK1XzM0xXsHw+qkKutQhmCa36lNOeNv1c52QPpibEp2DwdwYrUE5WGDE4ObeJP07eVtJ6CIQAl/V37KHyrXGVdGRicJgxDcBpp61a7PyVq/f8/MlsFwiYMFB+QUnkE6b0mcr0Ssnxj8LF6bePvrOkqbW3mzarVst87sCGISUEguXOKFnMwpKGRQTME6aIt7P6pnzd2aBW+BgZDxDAEp5H2Hg9CQHyUukiXFqdx5dQsrpqmBR19HrX6P/iaaoRVt08F/npagx6BTkK2WgFWhBgCfdtHvcx+wV2ANrkP4hEA3DFJ63NkSEMjg+4RBKShAXrOGBiMIsay4hSQUu01fNX0bGwWE209HhJjrIF8f4vZxB9vm6sMwKqPqhqB0JTEPc+pMnTo6xGA6qdy5B3lNQihDEFcZjCfP2Oyahl9/H214UV/6BO/3gPe8AhGhoAh0KQh28hlgRgYnAiGITgFNh9v4cv/2kW01cyV07Lo7urgnzwAO+pUW12dPc/B0dWqJUPuQlVEVLtb9RXRW+T29ghA5WHvflZlBaWNV/ECbUOUAFc+pFo+RCf2P9BYLSbQrBWeGTGCkcHaO0ZgeAQGZyaGITgF9mudQxs6VJ64taOKSf5jqkTc6VDN13xe1ZI2awZc/ctgMVbWTFVBeHS1mjASIxR56TtGlX+oqm0bDqkc41AypwZzzPsj4BEcDb9vMLz0jhEYhsDgDMUwBKeA3kK6SdtBTHSrbSNJmwjvfFf1qs+aobJ6PvFMr0Zv2l4Ar9yrVvuRqnVTiyE2TcUJxsxRW/n19giGgi4FtZYreeJMKNg6HwiRhrzmGCwnUi1uYDCCGIbgFNA3lWnsVIbA7GpVT9z4J7Xj0IZfq5zvjKmqMVVvZt6sCsT6a+8rhKoU1jdhh8gbdgxGVILqdun3Gt7ASKLFBFLowGcxvneDMxfDEJwkbq+fow2qHXBjh0obtemGwJ6hNgOfdpPaBnLBXZF7B5mt8Pn1A1dgXv1ztTn24deVtBDasGuoCKHiAl2NwXiBwfCjZQmZhcRjyEIGZzCGIThJjjV24vb5EULtOyylJNrTpr5RXYrJnKo2fRmIwVIKoxPhE6vUVpJ+b7B3+4kSk6IMgREoHjlCJn95qsVkBgbDiGEITpKDte2Y8fHllC282H4BnS4viXTiMUVjPd0N2kwmWHzPqZ0jpCW1wQhhMuMzx2D29WCKMgyBwZmLEb06AXrcPl7aWYXL6+NATTsrrTu5r+u3TO/eRFu3hxTRgTvqDF1x6wbAqCEYUUzRKk4QFTtA00EDg1HG8AhOgP974wCrNlVwqK6Dg3XtfC5mJ7gh1d9MVWsPyXTgPVMNgR4bMDyCEUXo8pAhDRmcwRiGYIhsPNbMqk0VpMVF8ef3S7Fb/CyybgUgU7RxrLGTKaIDGZM1yiPtB90AGDGCkUWvJj5dfS4+eMkAAB4PSURBVIYMDIYBQxoaAj1uHw+8uIf81FjeuP9CshKimeXbR4xfZQ1liFaONnSSTAfCPkL7yJ4osYY0NCqE7lNsYHCGYhiCIfCPLRWUN3fz0I0zyIiP5pGPzeQa6zb8llicadPJpJVjjZ2kiA4scWeoIYgxgsWjQsAQGH2GDM5cDGloEKSUPLO5nNl5SSwuUpP8BYXJyLg9iPzLEV4fmQ3bOV7vIFF0444/Q7cQjMvUbjNGdxznG7ohMOoIDM5ghtUjEEKUCSH2CiF2CSG2aY+lCCFWCyGOaLdntGi9+XgLxxq7uHVhyObtx99HdDXA5GuxJuWQKVrpaW8CwBp3hm4hWHwp3PwsZM8c7ZGcXwQ8AiNGYHDmMhLS0MVSyllSSr2PwgPAGinleGCNdv+M5dnNFSREW7hmRshG5ut/AXFZMOkaTAnZxIsexgrVAkKcqRq82QKTro7c08hg+DAMgcFZwGjECD4CPKX9/yng+lEYw5Bo7nTx5r5abpo7lmirVtFbtgHK1sMF94M1Wm0oDkw0VarnY8/QGIHB6GAYAoOzgOE2BBJ4RwixXQhxl/ZYppSyFkC7jShaCyHuEkJsE0Jsa2xsHOZhRmbt4UY8PsnH5uYGH3z/YbCnw9zPqPvxKl10kjAMgUEErEaMwODMZ7iDxRdIKWuEEBnAaiHEoaG+UEr5OPA4wLx58+RwDXAgqlt7gJDN57c+oTaBuexHwXRAzSOYJCrU/TNVGjIYHYysIYOzgGE1BFLKGu22QQjxErAAqBdCZEspa4UQ2UDDcI7hVKhr7yEtLgobXnj5q7DzadUWev7nggdp2TiTTJohMNIzDUIx6ggMzgKGTRoSQtiFEPH6/4HLgX3AK8Dt2mG3Ay8P1xhOlZo2JzlJ0bDnn8oILP0a3PpC+EUdnYjXFE2K6MRtijYueINwjMpig7OA4fQIMoGXhMpSsQDPSinfEkJsBZ4TQtwJVAAfG8YxnBJ1Dif5qbFw4BVILoBLHuybdSMEzph04roqcVoTMfb+MggjfwlMvQFSx4/2SAwM+mXYDIGUshTok7QupWwGVgzX+55Oahw9LMu3wb7/wqK7+0299MVmQVclHtsZXRJhMBok5cLH/jbaozAwGBCjxUQ/dLq8dDi9LPBuV3sFT7q232NNiSpg7DfiAwYGBmchhiHohzqHE4DJbf9VAeGx8/s9Nj5NpZempJ2hnUcNDAwMBmBQQyCEuPdMbwMxHNQ6eojCTVbDeph0TeQ9h3W0WgLzmdpewsDAwGAAhuIRZAFbhRDPCSGuFOL86FFQ63CyxLQfs7cHJl8z8MFaLYFRTGZgYHA2MqghkFJ+FxgPPAF8BjgihPiJEKJomMc2qtS2OSkW1erOmLkDH6x5BEYNgYGBwdnIkGIEUkoJ1Gn/vEAy8IIQ4uFhHNuoUtfeQ5GtFaISIDpx4INTi8FsgzQjRdDAwODsY9D0USHEl1CFX03AX4BvSCk9QggTcAT45vAOcXSoaXNynaUNEscOfnBCNnyzFKKMDcoNDAzOPoZSR5AG3CilLA99UErpF0IMIp6fvdQ5nOSIJkgoGNoLDCNgYGBwljIUaegNoEW/I4SIF0IsBJBSHhyugY02NY4e0vyNQ/MIDAwMDM5ihmIIHgM6Q+53aY+ds3S6vHicXdi9Q5SGDAwMDM5ihmIIhBYsBpQkxDm+13Gdw0m20JwgwxAYGBic4wzFEJQKIb4khLBq/+4HSod7YKNJraNHxQfAMAQGBgbnPEMxBHcDS4BqoApYCNw14CvOcmrbnOSIZnXHMAQGBgbnOINKPFLKBuDmERjLGcOxxk7yTM1IBCI+Z7SHY2BgYDCsDKWOIBq4E5gKROuPSyk/O4zjGlUO13dwS0w7wpYJFmOHAQMDg3OboUhDT6P6DV0BrAPGAh3DOajR5nBdBwWWFkMWMjAwOC8YiiEollI+CHRJKZ8CrgamD++wRg9Hj4dah5NM2QSJY0Z7OAYGBgbDzlAMgUe7bRNCTAMSgYJhG9Eoc6S+A5DEu+shMXe0h2NgYGAw7AylHuBxbT+C76I2no8DHhzWUY0ih+o6SKYDs89pSEMGBgbnBQMaAq2xXLuUshV4HygckVGNIiX1HRRHtak7hiEwMDA4DxhQGtKqiO8dobGcERyu62BuktZRI8GIERgYGJz7DCVGsFoI8XUhRK4QIkX/N+wjG0GcHh/7axxIKTlc38G0WId6IilvdAdmYGBgMAIMJUag1wt8MeQxyTkkE33/lf38c2sl37xyIm3dHiaYqtRuY8bWkwYGBucBQ6ksHncqbyCEMAPbgGop5TVCiHHAP4EUYAdwm5TSfSrvcSo0drh4cWc1MVYzD791GIAsdxlkTIbzY3tmAwOD85xBpSEhxKcj/TuB97gfCN234GfAr6SU44FWVNXyqPH0pnLcXj/P372YWblJmIQkznEU0ieN5rAMDAwMRoyhxAjmh/xbCnwfuG4oJxdCjEUVoP1Fuy+AS4AXtEOeAq4/oRGfRpweH6s2lXPp5AymjUlk1ecW8p/bxmFydyiPwMDAwOA8YCjS0H2h94UQiai2E0PhUdSexvo+jqlAm5TSq92vAiKm5ggh7kLrcpqXNzxB21d21dDS5ebOC1W4Iy7KwgxbrXrS8AgMDAzOE4biEfSmGxg/2EHafsYNUsrtoQ9HOFRGeAwp5eNSynlSynnp6eknMczBKa2uY4athkWFIUlQDYfUreERGBgYnCcMpfvoqwQnaxMwBXhuCOe+ALhOCHEVqmtpAspDSBJCWDSvYCxQczIDPx3Mr1nFN01PIda1wEXfAJMJGg9CbBrY00ZrWAYGBgYjylDSR38e8n8vUC6lrBrsRVLKbwPfBhBCLP//7d19cFX1ncfx9zfJzRMP8qwRrKFqKyIClSIrzuqKrsC24lRmxGFda911rMyI2Lo+0O7qVDq6Ou3KVOlitYplqhZFrGttLQ91i4oGBRHQglZL5CmggTw/fvePc4IXzE1Ckptzyfm8Zu7knnPPueebX3Lzze93zvl9ge+7+2wz+w0wk+DKoauBFUcbdHfJq/+MLBzW/Bh2bYQrfhX0CNQbEJEY6cjQ0N+Ade7+J3dfC+w3s+IuHPNW4GYz205wzuCRLrxXl2Q3VrPbhsFFd8H7/wsbfgVl7+v8gIjESkd6BL8hKFXZoilc9/WOHsTd1wBrwucfAhM7HGEa5TTVUJdVAJPnwvsvwu/nQ30FDFMiEJH46EiPICf5hq/wea8o25VoqqY+qyC4cWzavVAX1tsZqqEhEYmPjiSCMjM7dN+Amc0A9qUvpJ6T21xDQ3ZBsHDieBj/z2DZOkcgIrHSkaGh64GlZvazcLkUOJo7izNWbnMt1dkDP18x/X74+r9CYa+aU09EpE0duaHsA2CSmfUFzN17Tb3ifK/hYHbh5ysS+XDiuOgCEhGJQEfmGvqxmQ1w90p3rzCzgWZ2d08El255XktToiDqMEREItWRcwTT3L28ZSGsVjY9fSH1nEKvpTmnT9RhiIhEqiOJINvM8loWzKwAyGtj+2OCNzdTQB2eKGx/YxGRXqwjJ4t/Baw0s1+Gy9cQzBp6TKurrSLfHM/tG3UoIiKR6sjJ4v8ys3eAiwgmjXsJODndgaVbbeVB8gHLVY9AROKto7OP7gaagcuBKRxeaOaYVFsTXPxkuTpHICLxlrJHYGZfAWYBVwL7gacILh/9hx6KLa3qq8NEkKehIRGJt7aGht4D/g/4prtvBzCzeT0SVQ9oCHsEOflKBCISb20NDV1OMCS02sweNrMptF5Y5pjUWFsJQE5+v3a2FBHp3VImAndf7u5XAKcTzBw6DzjezBaZ2T/2UHxp01gTJoIC9QhEJN7aPVns7lXuvtTdv0FQUWwDcFvaI0uzprogESQ0NCQiMXdUNYvd/VN3/x93vzBdAfWU5jAR5BZqaEhE4q0zxet7hea6KgDylAhEJOZimwioDxJBQWH/iAMREYlWrBNBnSfIz+8VxdZERDottokgq7GaKvLIzY5tE4iIADFOBNZQRQ0FmPWaWyNERDoltokgu7GGWjvmZ9MWEemy2CaCnMZq6kzVyURE0pYIzCzfzN4ws41mttnM7grXjzSzdWa2zcyeMrNIztbmNFVTn5UfxaFFRDJKOnsEdcCF7j4WGAdMNbNJwL3AT939NOAz4No0xpBSoqmG+mz1CERE0pYIPFAZLibChwMXAsvC9Y8Dl6UrhrbkNtdQn6WiNCIiaT1HYGbZZrYB2Au8DHwAlLt7Y7hJKTA8xb7XmVmJmZWUlZV1e2y5XktTjnoEIiJpTQTu3uTu4wgmq5sIjGptsxT7Lnb3Ce4+YejQod0eW35zDY3Z6hGIiPTIVUPuXk4wlfUkYICZtRTEGQHs7IkYjgiIAmppzlEiEBFJ51VDQ81sQPi8ALiIoNbxamBmuNnVwIp0xZBSYy1ZOM0JJQIRkbZKVXZVEfC4mWUTJJyn3f0FM9sCPGlmdwNvA4+kMYbWhRPOeUKF60VE0pYI3P0dYHwr6z8kOF8QGa+vDGpu5ioRiIjE8s7i+uqgcD15SgQiIvFMBDVBIshSj0BEJK6JILjPLUv1ikVE4pkIGsKhoRwlAhGReCaCxrBwfbYSgYhITBNBeI4gka/C9SIisUwETXXBfQS5BUoEIiKxTAQeDg3lFmpoSEQknXcWZ5xXt+/jL3sqmFxfRZ3nkJ+nwjQiIrFKBE+V7OC3G3fy25P2UEkBhbnZUYckIhK5WA0NVdU1gTdzwt4/83rzKAoSSgQiIrFKBNX1jYy3bQymnN83TaRAPQIRkXglgqr6JqbllFDnOaxqHkdeTqy+fRGRVsXqL2F1bQOX5q1nnY2hKdEPM4s6JBGRyMUqEQyv+4BhjbupLJ7KSYNUr1hEBGJ21dCk+tdoJoupl3+HiwuHRB2OiEhGiFWPYETzJ5TnDyer3zAS2bH61kVEUorNX8OGpmb6eBUNOZpWQkQkWWwSQXV9E32thqaEppUQEUkWo0TQSF9qaM5VIhARSRabRFBV10Q/q8FzNTQkIpIsNomgpUdAfv+oQxERySixSQRVtWEiyFOPQEQkWdoSgZmdZGarzWyrmW02s7nh+kFm9rKZbQu/DkxXDMlqayrIsWayC47ricOJiBwz0tkjaAS+5+6jgEnAHDM7A7gNWOnupwErw+W0q68+AEBOgYaGRESSpS0RuPsud38rfF4BbAWGAzOAx8PNHgcuS1cMyRqrgkSQKFSPQEQkWY+cIzCzYmA8sA443t13QZAsgGEp9rnOzErMrKSsrKzLMTTVHAQgt8+ALr+XiEhvkvZEYGZ9gWeAm9z9YEf3c/fF7j7B3ScMHTq0y3E01wY9gtw+6hGIiCRL66RzZpYgSAJL3f3ZcPUeMyty911mVgTsTWcMLbyuAtDQkEimaWhooLS0lNra2qhDOWbl5+czYsQIEolEp/ZPWyKwYLL/R4Ct7v6TpJeeB64G7gm/rkhXDIepDTsjunxUJKOUlpbSr18/iouLVSOkE9yd/fv3U1paysiRIzv1HukcGpoMXAVcaGYbwsd0ggRwsZltAy4Ol9PO6iuDJ3m6akgkk9TW1jJ48GAlgU4yMwYPHtylHlXaegTu/mcg1U92SrqOm0pWQzA0pB6BSOZREuiarrZfbO4szq6voo48yO7cGJqISG8Vm0SQ21hBTVZh1GGISIYpLy/noYceOur9pk+fTnl5eRoi6nmxSQSJxipqlQhE5AipEkFTU1Ob+7344osMGNA77kuKTc3ivOYq6nP6RB2GiLThrt9uZsvODt9u1CFnnNif//zm6JSv33bbbXzwwQeMGzeORCJB3759KSoqYsOGDWzZsoXLLruMHTt2UFtby9y5c7nuuusAKC4upqSkhMrKSqZNm8Z5553Hq6++yvDhw1mxYgUFBQWtHu/hhx9m8eLF1NfXc+qpp/LEE09QWFjInj17uP766/nwww8BWLRoEeeeey5Llizh/vvvx8w466yzeOKJJ7q1fSBGPYKC5mrqVZ1MRI5wzz33cMopp7Bhwwbuu+8+3njjDRYsWMCWLVsAePTRR1m/fj0lJSUsXLiQ/fv3f+E9tm3bxpw5c9i8eTMDBgzgmWeeSXm8b33rW7z55pts3LiRUaNG8cgjjwBw4403cv7557Nx40beeustRo8ezebNm1mwYAGrVq1i48aNPPDAA2lpg9j0CAqaq2nM6fodyiKSPm39595TJk6ceNj1+AsXLmT58uUA7Nixg23btjF48ODD9hk5ciTjxo0D4Oyzz+ajjz5K+f7vvvsuP/jBDygvL6eyspJLLrkEgFWrVrFkyRIAsrOzOe6441iyZAkzZ85kyJAhAAwaNKjbvs9ksUgE7k4fqjigHoGItKNPn8+HkNesWcMf//hHXnvtNQoLC7ngggtavV4/Ly/v0PPs7GxqampSvv+3v/1tnnvuOcaOHctjjz3GmjVrUm7r7j1yaW0shoZqG5rDesW6h0BEDtevXz8qKipafe3AgQMMHDiQwsJC3nvvPV5//fUuH6+iooKioiIaGhpYunTpofVTpkxh0aJFQHCi+uDBg0yZMoWnn3760HDUp59+2uXjtyYWiaCqrkHVyUSkVYMHD2by5MmceeaZ3HLLLYe9NnXqVBobGznrrLP44Q9/yKRJk7p8vB/96Eecc845XHzxxZx++umH1j/wwAOsXr2aMWPGcPbZZ7N582ZGjx7N/PnzOf/88xk7diw333xzl4/fGnP3tLxxd5owYYKXlJR0ev8du/dx0s9PYdOoeYy54s7uC0xEumzr1q2MGjUq6jCOea21o5mtd/cJ7e0bix5BTVVw04fla+ZREZEjxeJkcX3VZwBkq0yliPSQOXPmsHbt2sPWzZ07l2uuuSaiiFKLSSIIblBRvWIR6SkPPvhg1CF0WCyGhhqrVa9YRCSVWCSCz+sVKxGIiBwpFomguS5IBHl9B0YciYhI5olFIvDa4GaRgr69Y6ZAEZHuFItEYGGPIF9DQyLSRX379r6pamKSCCqo9QRZibz2NxYRiZlYXD6a3VBJlRWSH3UgItK2390Guzd173ueMAam3ZPy5VtvvZWTTz6ZG264AYA777wTM+OVV17hs88+o6GhgbvvvpsZM2a0e6jKykpmzJjR6n6t1RVIVYOgp/XuRLBnC7z3Al85uJZK68Pg9vcQkZiZNWsWN91006FE8PTTT/PSSy8xb948+vfvz759+5g0aRKXXnppuzOB5ufns3z58i/st2XLFhYsWMDatWsZMmTIocnjWmoQLF++nKamJiorK9P+/bamdyeC39+Bf7iGj/kKb55wBf8WdTwi0rY2/nNPl/Hjx7N371527txJWVkZAwcOpKioiHnz5vHKK6+QlZXFJ598wp49ezjhhBPafC9354477vjCfqtWrWq1rkBrNQii0LsTwdR7+N0HNdywYidLLzon6mhEJEPNnDmTZcuWsXv3bmbNmsXSpUspKytj/fr1JBIJiouLW61DcKRU+/VUXYHOStvJYjN71Mz2mtm7SesGmdnLZrYt/JreC/uHnc4v3q7my0P6cO4pGhgSkdbNmjWLJ598kmXLljFz5kwOHDjAsGHDSCQSrF69mo8//rhD75Nqv1R1BVqrQRCFdF419Bgw9Yh1twEr3f00YGW4nDabdx7grb+VM3vSyRmdjUUkWqNHj6aiooLhw4dTVFTE7NmzKSkpYcKECSxduvSwugFtSbVfqroCrdUgiEJa6xGYWTHwgrufGS6/D1zg7rvMrAhY4+5fbe99OluP4PZnN7H87VLW3X4RxxUmjnp/EUk/1SPoHsdSPYLj3X0XQPh1WKoNzew6Mysxs5KysrJOHexLgwq5ZvJIJQERkTZk7Mlid18MLIagR9CZ9/juBad0a0wiIgCbNm3iqquuOmxdXl4e69atiyiirunpRLDHzIqShob29vDxRUS6bMyYMWzYsCHqMLpNTw8NPQ9cHT6/GljRw8cXkQx0LNROz2Rdbb90Xj76a+A14KtmVmpm1wL3ABeb2Tbg4nBZRGIsPz+f/fv3Kxl0kruzf/9+8vM7P4lO2oaG3P3KFC9NSdcxReTYM2LECEpLS+nsRSESJNMRI0Z0ev+MPVksIvGQSCQYOXJk1GHEWiymoRYRkdSUCEREYk6JQEQk5tI6xUR3MbMyoGOzPn1uCLAvDeF0J8XYPTI9xkyPDxRjd8m0GE9296HtbXRMJILOMLOSjsyxESXF2D0yPcZMjw8UY3c5FmJsjYaGRERiTolARCTmenMiWBx1AB2gGLtHpseY6fGBYuwux0KMX9BrzxGIiEjH9OYegYiIdECvTARmNtXM3jez7WaW1nKYHYznJDNbbWZbzWyzmc0N1/dsDeeOxZptZm+b2Qvh8kgzWxfG+JSZ5UYc3wAzW2Zm74Xt+XeZ1o5mNi/8Ob9rZr82s/yo2/FoaohbYGH4+XnHzL4WYYz3hT/rd8xsuZkNSHrt9jDG983skqhiTHrt+2bmZjYkXI6kHTuj1yUCM8sGHgSmAWcAV5rZGdFGRSPwPXcfBUwC5oQx9WgN5w6aC2xNWr4X+GkY42fAtZFE9bkHgJfc/XRgLEGsGdOOZjYcuBGYEJZozQZmEX07PkbHa4hPA04LH9cBiyKM8WXgTHc/C/gLcDtA+PmZBYwO93ko/OxHESNmdhLBjMp/S1odVTsetV6XCICJwHZ3/9Dd64EngRlRBuTuu9z9rfB5BcEfr+FhXI+Hmz0OXBZNhAEzGwH8E/CLcNmAC4Fl4SaRxmhm/YG/Bx4BcPd6dy8nw9qRYDLHAjPLAQqBXUTcju7+CvDpEatTtdsMYIkHXgcGhIWkejxGd/+DuzeGi68DLVNszgCedPc6d/8rsJ3gs9/jMYZ+Cvw7kHzSNZJ27IzemAiGAzuSlkvDdRnBzIqB8cA6jqKGcw/5b4Jf5uZweTBQnvRBjLotvwyUAb8Mh69+YWZ9yKB2dPdPgPsJ/jPcBRwA1pNZ7dgiVbtl6mfoO8DvwucZE6OZXQp84u4bj3gpY2JsT29MBNbKuoy4NMrM+gLPADe5+8Go40lmZt8A9rr7+uTVrWwaZVvmAF8DFrn7eKCKzBhOOyQcZ58BjAROBPoQDBEcKSN+J1PItJ87ZjafYIh1acuqVjbr8RjNrBCYD/xHay+3si4jf+69MRGUAiclLY8AdkYUyyFmliBIAkvd/dlw9Z6WrmIG1HCeDFxqZh8RDKddSNBDGBAOcUD0bVkKlLp7S4XwZQSJIZPa8SLgr+5e5u4NwLPAuWRWO7ZI1W4Z9Rkys6uBbwCz/fPr3TMlxlMIkv7G8LMzAnjLzE4gc2JsV29MBG8Cp4VXaeQSnFB6PsqAwrH2R4Ct7v6TpJcypoazu9/u7iPcvZigzVa5+2xgNTAz3CzqGHcDO8zsq+GqKcAWMqgdCYaEJplZYfhzb4kxY9oxSap2ex74l/Cql0nAgZYhpJ5mZlOBW4FL3b066aXngVlmlmdmIwlOyL7R0/G5+yZ3H+buxeFnpxT4Wvi7mjHt2C5373UPYDrBFQYfAPMzIJ7zCLqE7wAbwsd0gjH4lcC28OugqGMN470AeCF8/mWCD9h24DdAXsSxjQNKwrZ8DhiYae0I3AW8B7wLPAHkRd2OwK8Jzlk0EPyxujZVuxEMaTwYfn42EVwBFVWM2wnG2Vs+Nz9P2n5+GOP7wLSoYjzi9Y+AIVG2Y2ceurNYRCTmeuPQkIiIHAUlAhGRmFMiEBGJOSUCEZGYUyIQEYk5JQIRwMyazGxD0qPb7lg2s+LWZqsUyRQ57W8iEgs17j4u6iBEoqAegUgbzOwjM7vXzN4IH6eG6082s5XhPPMrzexL4frjw3nzN4aPc8O3yjazhy2oU/AHMyuI7JsSOYISgUig4IihoSuSXjvo7hOBnxHMv0T4fIkH8+QvBRaG6xcCf3L3sQTzIG0O158GPOjuo4Fy4PI0fz8iHaY7i0UAM6t0976trP8IuNDdPwwnDtzt7oPNbB9Q5O4N4fpd7j7EzMqAEe5el/QexcDLHhSAwcxuBRLufnf6vzOR9qlHINI+T/E81TatqUt63oTOz0kGUSIQad8VSV9fC5+/SjBLK8Bs4M/h85XAd+FQ/ef+PRWkSGfpvxKRQIGZbUhafsndWy4hzTOzdQT/OF0ZrrsReNTMbiGomnZNuH4usNjMriX4z/+7BLNVimQsnSMQaUN4jmCCu++LOhaRdNHQkIhIzKlHICISc+oRiIjEnBKBiEjMKRGIiMScEoGISMwpEYiIxJwSgYhIzP0/DdyX5VIXgq4AAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#################################\n",
    "### Setting for this run\n",
    "#################################\n",
    "\n",
    "num_epochs = 150\n",
    "iter_per_ep = len(train_loader.sampler.indices) // train_loader.batch_size\n",
    "base_lr = 0.09\n",
    "max_lr = 0.175\n",
    "\n",
    "#################################\n",
    "### Init Model\n",
    "#################################\n",
    "\n",
    "torch.manual_seed(random_seed)\n",
    "model = ConvNet(num_classes=num_classes)\n",
    "model = model.to(device)\n",
    "\n",
    "##########################\n",
    "### COST AND OPTIMIZER\n",
    "##########################\n",
    "\n",
    "cost_fn = torch.nn.CrossEntropyLoss()  \n",
    "optimizer = torch.optim.SGD(model.parameters(), lr=base_lr)  \n",
    "\n",
    "########################################################################\n",
    "# Collect the data to be evaluated via the LR Range Test\n",
    "collect = {'epoch': [], 'cost': [], 'train_acc': [], 'val_acc': []}\n",
    "########################################################################\n",
    "\n",
    "start_time = time.time()\n",
    "for epoch in range(num_epochs):\n",
    "    epoch_avg_cost = 0.\n",
    "    model = model.train()\n",
    "    for batch_idx, (features, targets) in enumerate(train_loader):\n",
    "        \n",
    "        features = features.to(device)\n",
    "        targets = targets.to(device)\n",
    "\n",
    "        ### FORWARD AND BACK PROP\n",
    "        logits, probas = model(features)\n",
    "        cost = cost_fn(logits, targets)\n",
    "        optimizer.zero_grad()\n",
    "\n",
    "        cost.backward()\n",
    "\n",
    "        ### UPDATE MODEL PARAMETERS\n",
    "        optimizer.step()\n",
    "\n",
    "        epoch_avg_cost += cost\n",
    "        \n",
    "        #############################################\n",
    "        # Logging\n",
    "        if not batch_step % 600:\n",
    "            print('Batch %5d/%d' % (batch_step, iter_per_ep*num_epochs),\n",
    "                                    end='')\n",
    "            print('   Cost: %.5f' % cost)     \n",
    "\n",
    "\n",
    "    #############################################\n",
    "    # Collect stats    \n",
    "    model = model.eval()\n",
    "    train_acc = compute_accuracy(model, train_loader)\n",
    "    val_acc = compute_accuracy(model, val_loader)\n",
    "    epoch_avg_cost /= batch_idx+1\n",
    "    collect['epoch'].append(epoch+1)\n",
    "    collect['val_acc'].append(val_acc)\n",
    "    collect['train_acc'].append(train_acc)\n",
    "    collect['cost'].append(epoch_avg_cost / iter_per_ep)\n",
    "    \n",
    "    ################################################\n",
    "    # Logging\n",
    "    print('Epoch %3d' % (epoch+1), end='')\n",
    "    print('  |  Train/Valid Acc: %.2f/%.2f' % (train_acc, val_acc))\n",
    "    \n",
    "    \n",
    "    #############################################\n",
    "    # update learning rate\n",
    "    base_lr = cyclical_learning_rate(batch_step=batch_step,\n",
    "                                     step_size=num_epochs*iter_per_ep,\n",
    "                                     base_lr=base_lr,\n",
    "                                     max_lr=max_lr,\n",
    "                                     mode='triangular2')\n",
    "    for g in optimizer.param_groups:\n",
    "        g['lr'] = base_lr\n",
    "    ############################################\n",
    "\n",
    "    print('Time elapsed: %.2f min' % ((time.time() - start_time)/60))\n",
    "    \n",
    "print('Total Training Time: %.2f min' % ((time.time() - start_time)/60))    \n",
    "    \n",
    "\n",
    "plt.plot(collect['epoch'], collect['train_acc'], label='train_acc')\n",
    "plt.plot(collect['epoch'], collect['val_acc'], label='val_acc')\n",
    "plt.xlabel('Epoch')\n",
    "plt.ylabel('Accuracy')\n",
    "plt.legend()\n",
    "plt.show()\n",
    "\n",
    "\n",
    "plt.plot(collect['epoch'], collect['cost'])\n",
    "plt.xlabel('Epoch')\n",
    "plt.ylabel('Avg. Cost Per Epoch')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 34
    },
    "colab_type": "code",
    "id": "FAIyUHvzZUK_",
    "outputId": "830250cd-62eb-48e7-fdea-f3855d5d9baf"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Test accuracy: 61.69%\n"
     ]
    }
   ],
   "source": [
    "print('Test accuracy: %.2f%%' % (compute_accuracy(model, test_loader)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "903jZNgGdcjV"
   },
   "source": [
    "## Train with Cyclical Learning Rate (`exp_range`)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 3091
    },
    "colab_type": "code",
    "id": "Y6_0-ygOdbYd",
    "outputId": "f72b602e-a3d5-466f-a6e5-2be69f537a13"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch   1  |  Train/Valid Acc: 10.17/11.60\n",
      "Epoch   2  |  Train/Valid Acc: 11.49/11.70\n",
      "Epoch   3  |  Train/Valid Acc: 25.78/23.30\n",
      "Epoch   4  |  Train/Valid Acc: 26.36/27.90\n",
      "Epoch   5  |  Train/Valid Acc: 39.37/39.00\n",
      "Epoch   6  |  Train/Valid Acc: 42.89/40.80\n",
      "Epoch   7  |  Train/Valid Acc: 39.37/36.00\n",
      "Epoch   8  |  Train/Valid Acc: 45.47/44.20\n",
      "Epoch   9  |  Train/Valid Acc: 50.02/48.40\n",
      "Epoch  10  |  Train/Valid Acc: 50.26/47.70\n",
      "Epoch  11  |  Train/Valid Acc: 51.07/50.40\n",
      "Epoch  12  |  Train/Valid Acc: 52.54/51.00\n",
      "Epoch  13  |  Train/Valid Acc: 56.30/54.70\n",
      "Epoch  14  |  Train/Valid Acc: 53.49/51.60\n",
      "Epoch  15  |  Train/Valid Acc: 57.27/53.60\n",
      "Epoch  16  |  Train/Valid Acc: 54.77/52.10\n",
      "Epoch  17  |  Train/Valid Acc: 54.57/50.60\n",
      "Epoch  18  |  Train/Valid Acc: 56.87/52.60\n",
      "Epoch  19  |  Train/Valid Acc: 60.48/58.10\n",
      "Epoch  20  |  Train/Valid Acc: 57.57/55.80\n",
      "Epoch  21  |  Train/Valid Acc: 59.53/55.70\n",
      "Epoch  22  |  Train/Valid Acc: 61.76/58.70\n",
      "Epoch  23  |  Train/Valid Acc: 56.61/54.20\n",
      "Epoch  24  |  Train/Valid Acc: 60.27/58.40\n",
      "Epoch  25  |  Train/Valid Acc: 62.83/58.20\n",
      "Epoch  26  |  Train/Valid Acc: 63.13/58.80\n",
      "Epoch  27  |  Train/Valid Acc: 51.37/47.80\n",
      "Epoch  28  |  Train/Valid Acc: 63.18/59.70\n",
      "Epoch  29  |  Train/Valid Acc: 63.26/58.50\n",
      "Epoch  30  |  Train/Valid Acc: 59.02/57.40\n",
      "Epoch  31  |  Train/Valid Acc: 62.49/58.00\n",
      "Epoch  32  |  Train/Valid Acc: 64.12/57.00\n",
      "Epoch  33  |  Train/Valid Acc: 64.96/59.50\n",
      "Epoch  34  |  Train/Valid Acc: 59.77/55.10\n",
      "Epoch  35  |  Train/Valid Acc: 64.57/59.50\n",
      "Epoch  36  |  Train/Valid Acc: 61.37/58.30\n",
      "Epoch  37  |  Train/Valid Acc: 65.78/61.20\n",
      "Epoch  38  |  Train/Valid Acc: 64.57/59.20\n",
      "Epoch  39  |  Train/Valid Acc: 65.71/60.10\n",
      "Epoch  40  |  Train/Valid Acc: 64.29/60.10\n",
      "Epoch  41  |  Train/Valid Acc: 63.83/58.10\n",
      "Epoch  42  |  Train/Valid Acc: 67.49/59.90\n",
      "Epoch  43  |  Train/Valid Acc: 58.37/55.30\n",
      "Epoch  44  |  Train/Valid Acc: 66.92/62.40\n",
      "Epoch  45  |  Train/Valid Acc: 66.80/62.10\n",
      "Epoch  46  |  Train/Valid Acc: 64.27/56.40\n",
      "Epoch  47  |  Train/Valid Acc: 61.46/57.00\n",
      "Epoch  48  |  Train/Valid Acc: 67.49/60.00\n",
      "Epoch  49  |  Train/Valid Acc: 66.78/60.60\n",
      "Epoch  50  |  Train/Valid Acc: 67.60/61.40\n",
      "Epoch  51  |  Train/Valid Acc: 61.56/56.70\n",
      "Epoch  52  |  Train/Valid Acc: 68.42/60.00\n",
      "Epoch  53  |  Train/Valid Acc: 65.98/60.40\n",
      "Epoch  54  |  Train/Valid Acc: 64.53/59.60\n",
      "Epoch  55  |  Train/Valid Acc: 67.92/61.50\n",
      "Epoch  56  |  Train/Valid Acc: 66.49/59.70\n",
      "Epoch  57  |  Train/Valid Acc: 60.37/54.90\n",
      "Epoch  58  |  Train/Valid Acc: 66.04/60.20\n",
      "Epoch  59  |  Train/Valid Acc: 64.52/58.00\n",
      "Epoch  60  |  Train/Valid Acc: 69.13/62.10\n",
      "Epoch  61  |  Train/Valid Acc: 65.04/59.70\n",
      "Epoch  62  |  Train/Valid Acc: 68.39/60.10\n",
      "Epoch  63  |  Train/Valid Acc: 64.84/58.80\n",
      "Epoch  64  |  Train/Valid Acc: 68.32/60.50\n",
      "Epoch  65  |  Train/Valid Acc: 68.29/62.70\n",
      "Epoch  66  |  Train/Valid Acc: 67.53/60.50\n",
      "Epoch  67  |  Train/Valid Acc: 68.81/63.40\n",
      "Epoch  68  |  Train/Valid Acc: 69.23/61.50\n",
      "Epoch  69  |  Train/Valid Acc: 66.75/61.90\n",
      "Epoch  70  |  Train/Valid Acc: 64.38/57.70\n",
      "Epoch  71  |  Train/Valid Acc: 68.63/62.30\n",
      "Epoch  72  |  Train/Valid Acc: 68.43/62.80\n",
      "Epoch  73  |  Train/Valid Acc: 70.29/63.00\n",
      "Epoch  74  |  Train/Valid Acc: 67.50/60.50\n",
      "Epoch  75  |  Train/Valid Acc: 67.02/61.50\n",
      "Epoch  76  |  Train/Valid Acc: 65.49/58.10\n",
      "Epoch  77  |  Train/Valid Acc: 70.99/62.70\n",
      "Epoch  78  |  Train/Valid Acc: 67.99/61.40\n",
      "Epoch  79  |  Train/Valid Acc: 70.69/63.90\n",
      "Epoch  80  |  Train/Valid Acc: 67.63/62.20\n",
      "Epoch  81  |  Train/Valid Acc: 71.34/62.70\n",
      "Epoch  82  |  Train/Valid Acc: 68.85/63.10\n",
      "Epoch  83  |  Train/Valid Acc: 69.36/60.50\n",
      "Epoch  84  |  Train/Valid Acc: 69.17/61.40\n",
      "Epoch  85  |  Train/Valid Acc: 68.96/60.90\n",
      "Epoch  86  |  Train/Valid Acc: 67.52/61.60\n",
      "Epoch  87  |  Train/Valid Acc: 67.50/60.30\n",
      "Epoch  88  |  Train/Valid Acc: 64.41/59.60\n",
      "Epoch  89  |  Train/Valid Acc: 67.42/60.40\n",
      "Epoch  90  |  Train/Valid Acc: 68.84/63.70\n",
      "Epoch  91  |  Train/Valid Acc: 69.34/62.00\n",
      "Epoch  92  |  Train/Valid Acc: 70.38/63.10\n",
      "Epoch  93  |  Train/Valid Acc: 70.51/63.40\n",
      "Epoch  94  |  Train/Valid Acc: 67.36/59.90\n",
      "Epoch  95  |  Train/Valid Acc: 70.43/61.50\n",
      "Epoch  96  |  Train/Valid Acc: 71.22/62.80\n",
      "Epoch  97  |  Train/Valid Acc: 66.62/60.40\n",
      "Epoch  98  |  Train/Valid Acc: 67.72/60.20\n",
      "Epoch  99  |  Train/Valid Acc: 69.91/62.30\n",
      "Epoch 100  |  Train/Valid Acc: 67.40/60.50\n",
      "Epoch 101  |  Train/Valid Acc: 68.86/61.90\n",
      "Epoch 102  |  Train/Valid Acc: 66.22/61.00\n",
      "Epoch 103  |  Train/Valid Acc: 63.31/56.20\n",
      "Epoch 104  |  Train/Valid Acc: 66.99/60.30\n",
      "Epoch 105  |  Train/Valid Acc: 68.20/63.50\n",
      "Epoch 106  |  Train/Valid Acc: 62.79/58.40\n",
      "Epoch 107  |  Train/Valid Acc: 70.71/61.60\n",
      "Epoch 108  |  Train/Valid Acc: 71.60/61.20\n",
      "Epoch 109  |  Train/Valid Acc: 71.00/64.50\n",
      "Epoch 110  |  Train/Valid Acc: 67.55/61.00\n",
      "Epoch 111  |  Train/Valid Acc: 68.52/61.40\n",
      "Epoch 112  |  Train/Valid Acc: 65.78/58.70\n",
      "Epoch 113  |  Train/Valid Acc: 65.15/57.90\n",
      "Epoch 114  |  Train/Valid Acc: 70.42/61.70\n",
      "Epoch 115  |  Train/Valid Acc: 70.57/61.50\n",
      "Epoch 116  |  Train/Valid Acc: 71.08/62.00\n",
      "Epoch 117  |  Train/Valid Acc: 69.09/62.20\n",
      "Epoch 118  |  Train/Valid Acc: 70.03/63.00\n",
      "Epoch 119  |  Train/Valid Acc: 69.64/62.30\n",
      "Epoch 120  |  Train/Valid Acc: 70.66/64.50\n",
      "Epoch 121  |  Train/Valid Acc: 70.62/63.70\n",
      "Epoch 122  |  Train/Valid Acc: 69.05/61.90\n",
      "Epoch 123  |  Train/Valid Acc: 70.63/60.50\n",
      "Epoch 124  |  Train/Valid Acc: 70.81/61.90\n",
      "Epoch 125  |  Train/Valid Acc: 67.99/59.90\n",
      "Epoch 126  |  Train/Valid Acc: 68.54/61.10\n",
      "Epoch 127  |  Train/Valid Acc: 70.59/62.40\n",
      "Epoch 128  |  Train/Valid Acc: 70.12/61.40\n",
      "Epoch 129  |  Train/Valid Acc: 68.87/59.50\n",
      "Epoch 130  |  Train/Valid Acc: 66.19/60.00\n",
      "Epoch 131  |  Train/Valid Acc: 70.92/62.20\n",
      "Epoch 132  |  Train/Valid Acc: 68.28/59.90\n",
      "Epoch 133  |  Train/Valid Acc: 67.72/62.00\n",
      "Epoch 134  |  Train/Valid Acc: 73.66/64.90\n",
      "Epoch 135  |  Train/Valid Acc: 70.24/59.40\n",
      "Epoch 136  |  Train/Valid Acc: 70.25/60.40\n",
      "Epoch 137  |  Train/Valid Acc: 70.21/62.20\n",
      "Epoch 138  |  Train/Valid Acc: 69.07/60.10\n",
      "Epoch 139  |  Train/Valid Acc: 68.56/60.40\n",
      "Epoch 140  |  Train/Valid Acc: 67.09/61.40\n",
      "Epoch 141  |  Train/Valid Acc: 70.68/60.10\n",
      "Epoch 142  |  Train/Valid Acc: 65.23/59.60\n",
      "Epoch 143  |  Train/Valid Acc: 67.44/60.00\n",
      "Epoch 144  |  Train/Valid Acc: 71.34/64.20\n",
      "Epoch 145  |  Train/Valid Acc: 69.61/61.50\n",
      "Epoch 146  |  Train/Valid Acc: 72.49/62.40\n",
      "Epoch 147  |  Train/Valid Acc: 68.43/59.50\n",
      "Epoch 148  |  Train/Valid Acc: 54.68/47.80\n",
      "Epoch 149  |  Train/Valid Acc: 67.08/61.50\n",
      "Epoch 150  |  Train/Valid Acc: 68.17/59.50\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#################################\n",
    "### Setting for this run\n",
    "#################################\n",
    "\n",
    "num_epochs = 150\n",
    "iter_per_ep = len(train_loader.sampler.indices) // train_loader.batch_size\n",
    "base_lr = 0.09\n",
    "max_lr = 0.175\n",
    "\n",
    "#################################\n",
    "### Init Model\n",
    "#################################\n",
    "\n",
    "torch.manual_seed(random_seed)\n",
    "model = ConvNet(num_classes=num_classes)\n",
    "model = model.to(device)\n",
    "\n",
    "##########################\n",
    "### COST AND OPTIMIZER\n",
    "##########################\n",
    "\n",
    "cost_fn = torch.nn.CrossEntropyLoss()  \n",
    "optimizer = torch.optim.SGD(model.parameters(), lr=base_lr)  \n",
    "\n",
    "########################################################################\n",
    "# Collect the data to be evaluated via the LR Range Test\n",
    "collect = {'epoch': [], 'cost': [], 'train_acc': [], 'val_acc': []}\n",
    "########################################################################\n",
    "\n",
    "\n",
    "start_time = time.time()\n",
    "for epoch in range(num_epochs):\n",
    "    epoch_avg_cost = 0.\n",
    "    model = model.train()\n",
    "    for batch_idx, (features, targets) in enumerate(train_loader):\n",
    "        \n",
    "        features = features.to(device)\n",
    "        targets = targets.to(device)\n",
    "\n",
    "        ### FORWARD AND BACK PROP\n",
    "        logits, probas = model(features)\n",
    "        cost = cost_fn(logits, targets)\n",
    "        optimizer.zero_grad()\n",
    "\n",
    "        cost.backward()\n",
    "\n",
    "        ### UPDATE MODEL PARAMETERS\n",
    "        optimizer.step()\n",
    "\n",
    "        epoch_avg_cost += cost\n",
    "        \n",
    "        #############################################\n",
    "        # Logging\n",
    "        if not batch_step % 600:\n",
    "            print('Batch %5d/%d' % (batch_step, iter_per_ep*num_epochs),\n",
    "                                    end='')\n",
    "            print('   Cost: %.5f' % cost)     \n",
    "\n",
    "\n",
    "    #############################################\n",
    "    # Collect stats    \n",
    "    model = model.eval()\n",
    "    train_acc = compute_accuracy(model, train_loader)\n",
    "    val_acc = compute_accuracy(model, val_loader)\n",
    "    epoch_avg_cost /= batch_idx+1\n",
    "    collect['epoch'].append(epoch+1)\n",
    "    collect['val_acc'].append(val_acc)\n",
    "    collect['train_acc'].append(train_acc)\n",
    "    collect['cost'].append(epoch_avg_cost / iter_per_ep)\n",
    "    \n",
    "    ################################################\n",
    "    # Logging\n",
    "    print('Epoch %3d' % (epoch+1), end='')\n",
    "    print('  |  Train/Valid Acc: %.2f/%.2f' % (train_acc, val_acc))\n",
    "    \n",
    "    \n",
    "    #############################################\n",
    "    # update learning rate\n",
    "    base_lr = cyclical_learning_rate(batch_step=batch_step,\n",
    "                                     step_size=num_epochs*iter_per_ep,\n",
    "                                     base_lr=base_lr,\n",
    "                                     max_lr=max_lr,\n",
    "                                     mode='exp_range')\n",
    "    for g in optimizer.param_groups:\n",
    "        g['lr'] = base_lr\n",
    "    ############################################\n",
    "\n",
    "    print('Time elapsed: %.2f min' % ((time.time() - start_time)/60))\n",
    "    \n",
    "print('Total Training Time: %.2f min' % ((time.time() - start_time)/60))\n",
    "\n",
    "    \n",
    "plt.plot(collect['epoch'], collect['train_acc'], label='train_acc')\n",
    "plt.plot(collect['epoch'], collect['val_acc'], label='val_acc')\n",
    "plt.xlabel('Epoch')\n",
    "plt.ylabel('Accuracy')\n",
    "plt.legend()\n",
    "plt.show()\n",
    "\n",
    "\n",
    "plt.plot(collect['epoch'], collect['cost'])\n",
    "plt.xlabel('Epoch')\n",
    "plt.ylabel('Avg. Cost Per Epoch')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 34
    },
    "colab_type": "code",
    "id": "CyUYaENcZWIS",
    "outputId": "d660813a-7fbc-4740-d586-7d586ee8d2e4"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Test accuracy: 59.81%\n"
     ]
    }
   ],
   "source": [
    "print('Test accuracy: %.2f%%' % (compute_accuracy(model, test_loader)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "REbfufQSZXSA"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "torch       1.0.0\n",
      "matplotlib  3.0.2\n",
      "torchvision 0.2.1\n",
      "numpy       1.15.4\n",
      "\n"
     ]
    }
   ],
   "source": [
    "%watermark -iv"
   ]
  }
 ],
 "metadata": {
  "colab": {
   "collapsed_sections": [],
   "name": "Copy of recent-learning_rate_cyclic.ipynb",
   "provenance": [],
   "version": "0.3.2"
  },
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
